Chapter overview

In this chapter, I focus on the third of my three key questions about the development of representations of mental life: How do people of different ages deploy their conceptual representations of mental life to reason about specific entities in the world? Even more than other chapters, this question comes to life most vividly in the context of developmental comparisons; therefore I draw primarily on data from Studies 2-4, which included both adult and child samples. For details about the methods of all studies, see Chapter II. The goal of this chapter is to provide “snapshots” of mental capacity attributions to various target characters in early childhood, middle childhood, and adulthood, and to explore in finer-grained detail more continuous changes in children’s beliefs about the mental lives of these characters between 4-9y of age.

To structure this exploration, I focus in particular on age-related differences in children’s and adults assessments of animate beings vs. inanimate beings. As discussed in Chapter I, the animate-inanimate distinction has been the topic of extensive empirical and theoretical in both cognitive and developmental psychology, extending back at least as far as Piaget, with roots in some of the earliest discussions of mental life in the Western tradition. In the past few decades, empirical work on the animate-inanimate distinction has focused in particular on differences between animates vs. inanimates in their behaviors (e.g., their ability to engage in self-propelled movements or to effect causal changes in the world), their observable properties (e.g., having eyes and faces, containing blood, having organs on the inside), and the biological processes that they engage in or are subjected to (e.g., growth, reproduction, death; see Gelman & Spelke, 1981; Gelman & Opfer, 2002 for reviews). Some studies have also explored children’s developing understanding of the minds of animate beings—but not with the structure provided by the current analysis of naturally occurring “conceptual units.” In this chapter, I aim to push this aspect of the field’s understanding of the animate-inanimate distinction forward by providing a structured analysis of attributions of physiological sensations (BODY), social-emotional abilities (HEART), and perceptual-cognitive capacities (MIND) to animate vs. inanimate beings in large samples of 4- to 9-year-old US children and adults.

General analysis plan

High-level overview

In analyzing these datasets with an eye toward documenting the application or deployment of the conceptual representations described in Chapters III-IV, the basic insight is that the attribution of specific mental capacities to specific target characters provides evidence of how conceptual representations of mental life are deployed in everyday social cognition. In Chapter II, I illustrated this with the following example: If participants who assess the mental capacities of Characters 1, 2, and 3 share one general pattern of mental capacity attributions, and participants who assess the mental capacities of Characters 4, 5, and 6 share another pattern, this provides some evidence that conceptual representations of mental life might play a role in structuring representations of (and interactions with) different classes of beings in the world. Here I will translate this general intuition into a specific analysis plan to be applied to each of these datasets in turn.

Details of analyses

All analyses in this chapter make use of the BODY, HEART, and MIND scales developed in Chapter IV to summarize participants’ responses in terms of the conceptual units identified among adults in each study (as presented in Chapter III).

For each study, I conduct two analyses of scores each of these three domains (BODY, HEART, and MIND), via Bayesian regressions. First, I compare age groups (e.g., adults vs. children), with an eye toward assessing both overall differences between age groups and differential sensitivity to the distinction between animate beings vs. inanimate objects in that domain. Second, I examine age-related differences within the child samples, again with an eye toward assessing overall increases or decreases in attributions with increasing age as well as increases or decreases in children’s sensitivity to the animate-inanimate distinction in that domain. For all analyses, I conduct Bayesian regressions on raw scores (which ranged from 0-1 for each domain), including maximal random effects structures (contingent on the range of characters included in the study and the within- vs between-subjects design of the study).

For two of these studies—Study 2 and Study 4, which both employed the “edge case” variant of the general empirical approach—the comparison between “animate beings” and “inanimate objects” is redundant with a full comparison of all target characters included in the study. To maximize comparability (and minimize unnecessary complexity), I have chosen to analyze Study 3 in a similar way, looking at differences between two groups of target characters (five animate beings vs. four inanimate objects) rather than attempting to analyze all possible differences among the nine “diverse characters” included in that study.

In addition to these study-specific analyses, I include both visual and numerical summaries of findings across studies and samples in the General Discussion, as well as an additional regression analysis aimed at comparing the degree of the animate-distinction across domains (BODY, HEART, and MIND) and age groups (adults, 7- to 9-year-old children, and 4- to 6-year-old children), pooling data from Studies 2-4. This analysis again includes a maximal random effects structure (random intercepts for participants nested within studies and for specific target characters); rather than being conducted over raw scores (which ranged from 0-1), it is conducted over centered scores (centered to range from -0.5 to +0.5). See Table 5.7, caption, for more details about the coding of the parameters included in this analysis.

Study 2: Conceptual change between middle childhood (7-9y) and adulthood

In the context of this dissertation, Study 2 serves to provide an initial investigation of representations of mental life earlier in development, in what I have called middle childhood (7-9y). In this chapter, I focus on what this study can reveal about changes in the deployment of this concept between middle childhood and adulthood: How do US 7- to 9-year-old children’s attributions of BODY, HEART, and MIND compare to those of adults in their cultural context?

To review, in Study 2, 200 US adults and 200 US children between the ages of 7.01-9.99 years (median: 8.31y) each assessed a single target character on 40 mental capacities. This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

To facilitate comparison between children and adults in Study 2, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups.

Results

Children vs. adults

See Figure 5.1, panel A, for BODY, HEART, and MIND scores for both target characters among the 7- to 9-year-old children and adults in Study 2.

In the aggregate, both children and adults seem to have considered the beetle—the animate “edge case” featured in this study—to be a being with a moderately high degree of physiological sensations (mean BODY score among adults: 0.72, 95% CI: [0.67-0.77]; among children: 0.82, 95% CI: [0.79-0.86]) and perceptual-cognitive capacities (mean MIND score among adults: 0.69, 95% CI: [0.64-0.73]; among children: 0.70, 95% CI: [0.67-0.74]). However, adults and children appear to have diverged in their assessments of its abilities in the HEART domain: While adults tended to grant very little in the way of social-emotional abilities (mean HEART score among adults: 0.17, 95% CI: [0.12-0.23]), children’s HEART scores tended to hover around the midpoint of the scale (mean: 0.58, 95% CI: [0.52-0.64]).

For the robot—the inanimate “edge case” featured in this study—both adults and children, in the aggregate, indicated a high degree of perceptual-cognitive abilities (mean MIND score among adults: 0.83, 95% CI: [0.78-0.87]; among children: 0.80, 95% CI: [0.76-0.83]), and appeared to agree that the robot had less in the way of physiological sensations and social-emotional abilities than the beetle. However, the two age groups appear to have diverged in their assessments of the absolute degree of BODY and HEART that they were willing to grant the robot: Adults granted very little in either domain (mean BODY score: 0.10, 95% CI: [0.07-0.12]; mean HEART score: 0.06, 95% CI: [0.03-0.09]), while children granted middling abilities in both domains (mean BODY score: 0.34, 95% CI: [0.30-0.39]; mean HEART score: 0.51, 95% CI: [0.44-0.57]).

Table 5.1: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 7- to 9-year-old children in Study 2 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the beetle compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and target character. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
BODY
HEART
MIND
Parameter b 95% CI b 95% CI b 95% CI
Intercept (adults) 0.41 [ 0.38, 0.44] * 0.11 [ 0.08, 0.15] * 0.76 [ 0.73, 0.79] *
Beetle vs. GM (adults) 0.31 [ 0.28, 0.34] * 0.06 [ 0.02, 0.10] * -0.07 [-0.10, -0.04] *
Children vs. adults 0.18 [ 0.14, 0.22] * 0.43 [ 0.37, 0.48] * -0.01 [-0.05, 0.03]
Interaction -0.07 [-0.11, -0.03] * -0.02 [-0.08, 0.03] 0.02 [-0.02, 0.07]

A series of Bayesian regression analyses confirmed these general impressions (see Table 5.1 and Figure 5.1). Children’s BODY scores were generally higher than adults’, particularly for the robot; as a result, the difference between the beetle and the robot was attenuated among children, relative to adults (i.e., the interaction term was non-zero). Children’s HEART scores were also higher than adults’, but this difference did not vary substantially across target characters . There were no substantial differences between children and adults in their MIND scores.

Taken together, these observations highlight one especially striking difference between children and adults: For both edge cases, regardless of animacy status, children attributed substantially more HEART than did adults. Indeed, fully 70% of adults in Study 2 had HEART scores < 0.08 (i.e., answered at most one of the 6 HEART items with a response of “KINDA,” and otherwise answered “NO” to all HEART items). The more uniform distribution of children’s HEART scores across the 0-1 range stands in stark contrast to this adult standard; see Figure 5.1, panel B.

Discussion

Adults in Study 2 distinguished strongly between the animate character (the beetle) vs. the inanimate character (the robot) in terms of their capacities in the BODY domain. They granted both of these “edge cases” relatively limited abilities in the HEART domain, and relatively strong abilities in the MIND domain (with the robot actually exceeding the beetle in its perceived MIND abilities).

Like adults, 7- to 9-year-old children clearly respected the animate-inanimate distinction in their attributions of BODY abilities. Even among these relatively “old” children, however, there was room for increasing “adult-like-ness” across the age range: This distinction between the physiological sensations of a beetle vs. robot grew larger with increasing age, driven by decreases in BODY scores for the robot.

The biggest difference between children and adults in Study 2 was in the HEART domain. Children attributed far more HEART abilities—to both the beetle and the robot—than did adults, and although this tendency decreased across the age range, it did not appear to reach adult-like levels even among the oldest children in this sample (see Figure 5.2, center panel).

Children’s attributions of MIND to these edge cases were generally adult-like, and changed only slightly over the age range, increasing to fully adult-like levels. Like adults, children generally attributed many MIND scores to both characters, and particularly to the robot.

Study 3: Conceptual change over early and middle childhood (4-9y)

Study 3 builds on the investigation of middle childhood (7-9y) initiated in Study 2 and extends this exploration of conceptual change into earlier childhood (4-6y). In this chapter, I again focus on what this study can reveal about changes in the deployment of this concept—i.e., the attribution of BODY, HEART, and MIND to various beings in the world—over the course of early and middle childhood (7-9y).

To review, in Study 3, 116 US adults, 125 “older” children (7.08-9.98 years; median: 8.56y), and 124 “younger” children (4.00-6.98 years; median: 5.03y) each assessed a single target character on 20 mental capacities. This study employed the “diverse characters” variant of the general approach, with participants randomly or pseudo-randomly assigned to assess one of the following 9 characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

As in Study 2, to facilitate comparison between the three age groups included in Study 3, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups.

Results

Children vs. adults

See Figure 5.3, panel A, for BODY, HEART, and MIND scores for each of the nine target characters among the younger children (4-6y), older children (7-9y), and adults in Study 3, and Figure 5.3, panel B, for a visualization of scores with target characters grouped into animate beings (elephant, goat, mouse, bird beetle) vs. inanimate objects (teddy bear, doll, robot, computer). To facilitate comparison with Studies 2 and 4, I will focus here on animacy status, rather than analyzing all target characters individually.

In the aggregate, all three age groups seem to have considered the animate beings included in this study to have a relatively high degree of physiological sensations (mean BODY score among adults: 0.91, 95% CI: [0.88-0.94]; among older children: 0.84, 95% CI: [0.81-0.87]; among younger children: 0.73, 95% CI: [0.67-0.78]), and a middling degree of social-emotional abilities (mean HEART score among adults: 0.42, 95% CI: [0.34-0.50]; among older children: 0.54, 95% CI: [0.48-0.61]; among younger children: 0.57, 95% CI: [0.51-0.64]). Assessments of animate beings’ abilities in the MIND domain appear to have varied more by age group: While adults tended to grant animate beings a high degree of perceptual-cognitive abilities (mean MIND score among adults: 0.84, 95% CI: [0.79-0.88]), younger children’s MIND scores tended to hover around the midpoint of the scale (mean: 0.50, 95% CI: [0.44-0.56]), with older children falling in between (mean: 0.66, 95% CI: [0.60-0.71]).

For the inanimate beings included in this study, there was a high degree of consensus among adults that such entities had virtually no physiological or social-emotional abilities (mean BODY score: 0.04, 95% CI: [0.01-0.08]; mean HEART score: 0.03, 95% CI: [0.00-0.07]). In contrast, both groups of children, in the aggregate, granted low to moderate abilities to inanimate beings in both the BODY domain (mean BODY score among older children: 0.19, 95% CI: [0.13-0.25]; among younger children: 0.28, 95% CI: [0.20-0.37]) and the HEART domain (mean HEART score among older children: 0.27, 95% CI: [0.19-0.37]; among younger children: 0.31, 95% CI: [0.23-0.40]). All three age groups, in the aggregate, granted middling perceptual-cognitive abilities to these inanimate characters (which included two “intelligent” technologies; mean MIND score among adults: 0.33, 95% CI: [0.23-0.43]; among older children: 0.47, 95% CI: [0.38-0.58]; among younger children: 0.34, 95% CI: [0.25-0.43]).

Table 5.3: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 9-year-old children in Study 3 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the animate characters compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and animacy status. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses.In addition to the fixed effects listed here, these regressions included random intercepts for individual target characters (n=9). For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
BODY
HEART
MIND
Parameter b 95% CI b 95% CI b 95% CI
Intercept (adults) 0.47 [ 0.44, 0.51] * 0.23 [ 0.17, 0.28] * 0.58 [ 0.53, 0.64] *
Animate characters vs. GM (adults) 0.44 [ 0.40, 0.47] * 0.20 [ 0.14, 0.25] * 0.25 [ 0.20, 0.30] *
Older children (7-9y) vs. adults 0.04 [-0.01, 0.10] 0.18 [ 0.11, 0.26] * -0.02 [-0.09, 0.05]
Younger children (4-6y) vs. adults 0.03 [-0.02, 0.08] 0.22 [ 0.14, 0.29] * -0.16 [-0.24, -0.09] *
Interaction: Older children (7-9y) vs. adults -0.11 [-0.16, -0.06] * -0.06 [-0.14, 0.01] -0.16 [-0.23, -0.09] *
Interaction: Younger children (4-6y) vs. adults -0.21 [-0.27, -0.16] * -0.07 [-0.14, 0.01] -0.17 [-0.25, -0.10] *

A series of Bayesian regression analyses confirmed these general impressions of differences across age groups (see Table 5.3).

Neither older nor younger children’s BODY scores were generally higher than adults’, but in both groups of children the difference in BODY scores between animate vs. inanimate characters was attenuated, relative to adults (i.e., both interaction terms were non-zero). Meanwhile, in the HEART domain, both older and younger children’s HEART scores were generally higher than adults’, but this difference did not vary substantially across target characters. Finally, in the MIND domain, younger children’s (but not older children’s) MIND scores were substantially lower than adults’. In addition, in both groups of children the difference in MIND scores between animate vs. inanimate characters was attenuated, relative to adults.

Discussion

As in Study 2, adults in Study 3 distinguished very strongly between animate beings (the elephant, goat, mouse, bird, and beetle) vs. inanimate objects (the teddy bear, doll, robot, and computer) in terms of their capacities in the BODY domain: They were nearly unanimous in their denial of physiological sensations to inanimate objects, while all of the animate beings were granted a fairly high degree of BODY abilities (on average). Likewise, in the HEART domain, adults were nearly unanimous in their denial of social-emotional abilities to inanimate objects, while animate beings were perceived to vary in their HEART abilities. Finally, echoing Study 1, adults did not outright deny the possibility that some inanimate objects could have a fair degree of perceptual-cognitive abilities—but they did grant relatively more MIND abilities to animate beings.

Study 3 aligned with Study 2 in providing further evidence for a robust distinction between animates vs. inanimates in the BODY domain among 7- to 9-year-old children, and extended this distinction back to younger (4- to 6-year-old children). As in Study 2, however, this distinction appears to have increased with age within this sample of children—in this case, driven both by decreases in BODY scores for inanimate objects (as in Study 2) and by increases in BODY scores for animate beings.

Again echoing Study 2, the biggest differences between children and adults in Study 3 were in the HEART domain. In this case, it was children’s attributions of social-emotional abilities to inanimate objects—and in particular, the robot—that marked them as different from adults in this study. Interestingly, this difference between “snapshots” of older and younger children vs. adults was not reflected in age-related differences within the child sample: If anything, HEART scores among the relatively small sample of children (n = 25) who assessed the robot appeared to have increased with age (see Figure 5.4, panel A, center plot). Together with the results of Study 2, this provides some intriguing evidence that children (at least children in the San Francisco Bay Area) may have qualitatively different beliefs than adults about the possibility of social-emotional abilities in robots, perhaps reflecting cohort differences as well as any developmental changes. (I return this this possibility in Chapter VI.)

Finally, in contrast to Study 2, Study 3 also suggested substantial ongoing development in children’s attributions of MIND, characterized by dramatic increases in MIND scores with age. Like adults in this study (and like adults and 7- to 9-year-old children in Study 2), children of all ages seemed to be willing to attribute a fair degree of perceptual-cognitive abilities to inanimate beings. Age-related differences were driven not only by increases in these attributions (which run counter-typical to the broadest or bluntest version of a general “animate-inanimate” distinction), but also by increases in attributions of MIND to animate beings (see Figure 5.4).

Study 4: A focus on early childhood (4-5y)

Note: At the time of the submission of this dissertation, the sample of 4- to 5-year-old children for Study 4 was only partially complete. All results using this sample should thus be considered preliminary and not conclusive.

Study 4 builds on Study 3 by providing a targeted investigation of representations of mental life in the preschool years (4-5y). In this chapter, I again focus on what this study can reveal about attributions of BODY, HEART, and MIND at the earliest point in development that I have examined so far, and compare the deployment of this concept among young children vs. adults.

To review, in Study 4, 104 US adults and 43 US children between the ages of 4.02-5.59 years (median: 4.73y) each assessed two target characters on 18 mental capacities, with all aspects of the experimental design tailored to be appropriate for this youngest age group. This study employed the “edge case” variant of the general approach, with participants assessing both a beetle or a robot in sequence (with order counterbalanced across participants). (See Chapter II for detailed methods.)

Special notes on data processing and analysis

As in Studies 2 and 3, to facilitate comparison between children and adults in Study 4, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups.

Results

Children vs. adults

See Figure 5.5, panel A, for BODY, HEART, and MIND scores for both target characters among the 4- to 5-year-old children and adults in Study 4. On the whole, participants’ assessments of these two “edge cases” in Study 4 were similar to those of adults’ and 7- to 9-year-old children in Study 2.

As in Study 2, in the aggregate, both children and adults seem to have considered the beetle (the animate character) to be a being with a moderately high degree of physiological sensations (mean BODY score among adults: 0.77, 95% CI: [0.72-0.83]; among children: 0.73, 95% CI: [0.66-0.80]) and perceptual-cognitive capacities (mean MIND score among adults: 0.61, 95% CI: [0.55-0.66]; among children: 0.56, 95% CI: [0.47-0.65]). Adults granted relatively little in the way of social-emotional abilities to the beetle (mean HEART score among adults: 0.23, 95% CI: [0.17-0.29]), but—as with the older children in Study 2—children’s HEART scores tended to hover around the midpoint of the scale (mean: 0.46, 95% CI: [0.38-0.55]).

For the robot (the inanimate character) both adults and children, in the aggregate, indicated a moderate degree of perceptual-cognitive abilities (mean MIND score among adults: 0.62, 95% CI: [0.56-0.68]; among children: 0.55, 95% CI: [0.47-0.63]), and appeared to agree that the robot had less in the way of physiological sensations and social-emotional abilities than the beetle. However, echoing the results of Study 2, the two age groups appear to have diverged in their assessments of the absolute degree of BODY and HEART that they were willing to grant the robot: Adults granted very little in either domain (mean BODY score: 0.05, 95% CI: [0.03-0.07]; mean HEART score: 0.05, 95% CI: [0.02-0.08]), while children granted middling abilities in both domains (mean BODY score: 0.36, 95% CI: [0.28-0.44]; mean HEART score: 0.43, 95% CI: [0.35-0.51]).

Table 5.5: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 5-year-old children in Study 4 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the beetle compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and target character. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
BODY
HEART
MIND
Parameter b 95% CI b 95% CI b 95% CI
Intercept (adults) 0.41 [ 0.38, 0.44] * 0.14 [ 0.10, 0.17] * 0.61 [ 0.57, 0.65] *
Beetle vs. GM (adults) 0.36 [ 0.33, 0.39] * 0.09 [ 0.05, 0.12] * -0.01 [-0.05, 0.03]
Children vs. adults 0.14 [ 0.08, 0.20] * 0.31 [ 0.24, 0.37] * -0.06 [-0.13, 0.02]
Interaction -0.18 [-0.24, -0.12] * -0.07 [-0.14, -0.01] * 0.01 [-0.06, 0.09]

A series of Bayesian regression analyses confirmed these overall impressions, yielding remarkably similar results to the parallel comparison between 7- to 9-year-old children and adults in Study 2 (see Table 5.5).

As in Study 2, children’s BODY scores were generally higher than adults’. This appears to have been particularly true for the robot; as a result, the difference between the beetle and the robot was attenuated among children, relative to adults (i.e., the interaction term was non-zero). Again, as in Study 2, children’s HEART scores were also higher than adults’. In Study 4, this difference between children and adults was slightly more pronounced for the robot than the beetle. And yet again, as in Study 2, there were no substantial differences between children and adults in their MIND scores.

Discussion

Adults’ attributions of BODY, HEART, and MIND to the two “edge cases” included in Study 4 were very similar to their attributions in Study 2. As in previous studies, the difference between animates vs. inanimates was dramatic in the BODY domain, smaller in the HEART domain, and in this case non-existent in the MIND domain.

Study 4 aligned with Study 3 in providing evidence for a distinction between animate vs. inanimate characters in BODY attributions within the youngest sample tested in these studies (4- to 5-year-old children). As in previous studies, this distinction appears to have increased with age—but in contrast to previous studies, this appears to have been driven primarily by increases in BODY scores for the animate character (the beetle).

Like children in Studies 2 and 3, the 4- to 5-year-old children in this study generally attributed greater social-emotional abilities (HEART) to these characters, relative to adults. Finally, like the 7- to 9-year-old children in Study 2 (who also assessed these “edge cases”), the 4- to 5-year-old children demonstrated rather adult-like attributions in the MIND domain. The lack of age-related differences within the child sample in the domains of HEART and MIND should be interpreted with some caution, given the smaller sample size and more limited age range of children in Study 4 compared to Studies 2 and 3.

General discussion

In this chapter, I focused on a third aspect of the development of conceptual representations of mental life: the deployment of these representations in assessments of particular beings in the world. I focused in particular on analyses that might bring to light how representations of mental life interact with distinctions between animate beings vs. inanimate objects.

An adult endpoint

Taken together, these studies shed new light on the role of attributions of mental life in adults’ distinction between animate beings and inanimate objects. These findings are perhaps easiest to understand in terms of the visualizations of BODY, HEART, and MIND scores for animate vs. inanimate characters presented in Figures 5.8 and 5.9.

Table 5.7: Regression analysis of distinctions between animate vs. inanimate target characters in attributions of BODY, HEART, and MIND among US adults, 7- to 9-year-old children, and 4- to 6-year-old children in Studies 2-4. In terms of fixed effects, this Bayesian regression included all main effects and interactions between factor (dummy-coded for comparisons to the BODY domain as a baseline), age group (dummy-coded for comparisons to adults as a baseline), and animacy status (effect-coded for comparisons of animate characters to the grand mean collapsing across characters). The animate-inanimate comparisons (including interactions with age group) are highlighted in bold, because these are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
Parameter b 95% CI
BODY
BODY, among adults (intercept) -0.09 [-0.29, 0.18]
BODY, older children (7-9y) vs. adults (main effect) 0.13 [ 0.09, 0.17] *
BODY, younger children (4-6y) vs. adults (main effect) 0.12 [ 0.08, 0.17] *
BODY, animates vs. inanimates, among adults (main effect) 0.45 [ 0.38, 0.52] *
BODY, animates vs. inanimates, older children vs. adults (2-way interaction) -0.11 [-0.14, -0.07] *
BODY, animates vs. inanimates, younger children vs. adults (2-way interaction) -0.19 [-0.23, -0.15] *
HEART
HEART vs. BODY, among adults (main effect) -0.27 [-0.30, -0.25] *
HEART vs. BODY, older children (7-9y) vs. adults (2-way interaction) 0.21 [ 0.17, 0.25] *
HEART vs. BODY, younger children (4-6y) vs. adults (2-way interaction) 0.20 [ 0.15, 0.24] *
HEART vs. BODY, animates vs. inanimates, among adults (2-way interaction) -0.26 [-0.28, -0.23] *
HEART vs. BODY, animates vs. inanimates, older children vs. adults (3-way interaction) 0.05 [ 0.01, 0.10] *
HEART vs. BODY, animates vs. inanimates, younger children vs. adults (3-way interaction) 0.13 [ 0.09, 0.18] *
MIND
MIND vs. BODY, among adults (main effect) 0.24 [ 0.22, 0.27] *
MIND vs. BODY, older children (7-9y) vs. adults (2-way interaction) -0.12 [-0.16, -0.08] *
MIND vs. BODY, younger children (4-6y) vs. adults (2-way interaction) -0.29 [-0.34, -0.24] *
MIND vs. BODY, animates vs. inanimates, among adults (2-way interaction) -0.34 [-0.36, -0.31] *
MIND vs. BODY, animates vs. inanimates, older children vs. adults (3-way interaction) 0.06 [ 0.02, 0.11] *
MIND vs. BODY, animates vs. inanimates, younger children vs. adults (3-way interaction) 0.17 [ 0.13, 0.22] *

First, in the aggregate, the largest and most robust animate-inanimate distinctions among adults in these studies were in the BODY domain, for which the difference between animate vs. inanimate characters spanned at least half of the 0-1 scale across all of the studies included in this dissertation (see Figure 5.7, top row). A regression analysis confirmed that adult participants distinguished strongly between animate vs. inanimate characters in their BODY scores; collapsing across studies this distinction was still present, but substantially diminished, in the HEART and MIND domains. Visual inspection of Figure 5.7 (top row) suggests that the difference between animate and inanimate characters in BODY scores was quite consistent across studies, while differences in HEART and MIND scores varied rather dramatically. (See also the “Robot vs. GM” and “Animate characters vs. GM” rows in Tables 5.1, 5.3, and 5.5 for differences between animate vs. inanimate characters among adults each study separately.)

Table 5.8: Summary statistics for BODY, HEART, and MIND scores in Studies 2-4, organized by the age group of participants and the animacy status of target characters.
BODY
HEART
MIND
Correlations (Pearson's r)
Animacy status Age group mean sd mean sd mean sd BODY vs. HEART BODY vs. MIND HEART vs. MIND
Study 2
animate Adults 0.22 0.27 -0.33 0.27 0.19 0.24 0.38 0.68 0.43
Children, 7-9y 0.32 0.17 0.08 0.33 0.20 0.18 0.28 0.38 0.20
inanimate Adults -0.40 0.14 -0.44 0.17 0.33 0.23 0.69 0.25 0.08
Children, 7-9y -0.16 0.24 0.01 0.33 0.30 0.19 0.64 0.24 0.22
Study 3
animate Adults 0.41 0.14 -0.08 0.33 0.34 0.18 0.29 0.68 0.46
Children, 7-9y 0.34 0.15 0.04 0.28 0.16 0.24 0.39 0.36 0.16
Children, 4-6y 0.23 0.23 0.07 0.28 0.00 0.27 0.54 0.45 0.39
inanimate Adults -0.46 0.12 -0.47 0.13 -0.17 0.36 0.89 0.20 0.01
Children, 7-9y -0.31 0.20 -0.23 0.33 -0.03 0.35 0.65 0.29 0.23
Children, 4-6y -0.22 0.32 -0.19 0.31 -0.16 0.34 0.80 0.62 0.71
Study 4
animate Adults 0.27 0.28 -0.27 0.32 0.11 0.29 0.42 0.75 0.58
Children, 4-6y 0.23 0.23 -0.04 0.29 0.06 0.30 0.31 0.43 0.51
inanimate Adults -0.45 0.10 -0.45 0.14 0.12 0.31 0.63 0.24 0.23
Children, 4-6y -0.14 0.28 -0.07 0.27 0.05 0.28 0.59 0.56 0.56

Beyond this, there appear to be have been differences between animate vs. inanimate characters in the variability of adults’ BODY, HEART, and MIND attributions. In each study, adults’ attributions to animate beings varied widely along all three dimensions: BODY, HEART, and MIND (see Figure 5.7, top row; Figure 5.8, panel C, top row; and Table 5.8 for standard deviations across study, animacy status, and domain). This variability has several possible sources, including differences in opinions or beliefs across individual participants (especially relevant for attributions to the animate “edge case”—the beetle—in Studies 1a, 1b, 1c, 2, and 4), as well as differences in the (perceived) mental capacity profiles of different animate beings (especially relevant for attributions to the “diverse characters” featured in Study 1d and Study 3).

Moreover, these attributions appear to have varied in tandem (see Figure 5.8 and Table 5.8). BODY and MIND scores for animate beings were particularly strongly correlated (Pearson’s r = 0.68-0.75 across Studies 2-4), and scores for each of these more “basic” conceptual units (per Chapter IV) were also correlated quite strongly with HEART scores (BODY vs. HEART: r = 0.29-0.42; MIND vs. HEART: r = 0.43-0.58). Indeed—to pick up on a thread from the General Discussion in Chapter IV—attributions of HEART to animate beings appear to have been jointly dependent on attributions of both BODY and MIND; see Figure 5.8, panel C, in which strong HEART scores are present only among participants who received strong BODY and MIND scores—i.e., reddish points are only present in the upper right corner of the plot.

Meanwhile, adults’ attributions to inanimate objects (Figure 5.8, panel C, bottom row) varied particularly strongly in the MIND domain, but seemingly less in the domains of BODY and HEART (see also Table 5.8). Among inanimate objects, BODY and HEART scores were particularly strongly correlated (Pearson’s r = 0.63-0.89 across Studies 2-4)—but high scores in either of these two domains were quite rare. Scores for the two more “basic” conceptual units (per Chapter IV), BODY and MIND, were only weakly correlated (Pearson’s r = 0.20-0.25 across Studies 2-4), and MIND and HEART scores were virtually independent (MIND vs. HEART: r = 0.01-0.23).

In sum, these studies suggest that—in addition to biological properties like having blood, digesting food, growing, reproducing, and dying—US adults distinguish animate beings from inanimate objects by their high degree of perceived physiological sensations (BODY)—and, to a lesser degree, their superior social-emotional abilities (HEART) and perceptual cognitive abilities (MIND). Above and beyond perceiving animates vs. inanimates to differ in their “average” mental capacities, adults in these studies also appeared to conceptualize animate beings as entities who vary quite dramatically in all three aspects of mental life, and for whom these different aspects of mental life may be closely related. In contrast, in this consensus view inanimate objects appear to be seen as entities that vary mostly in their perceptual-cognitive abilities (MIND), with consistently little of the physiological sensations or social-emotional abilities of the BODY and HEART.

A developmental trajectory

As among adults, the largest and most robust animate-inanimate distinctions among children in these studies were also in the BODY domain—but these distinctions were not quite as dramatic among children as they were among adults (see Figure 5.7, center and right columns). The regression analysis reported in the previous section confirmed that the difference in BODY scores between animate vs. inanimate characters was smaller both among older children (7-9y) and particularly among younger children (4-6y) than it was among adults (see Table 5.7). This appears to have been driven primarily by children over-attributing BODY to inanimate characters: While adults’ BODY scores were near zero for inanimate beings, children’s BODY scores for inanimate characters hovered, on average, around 0.25 on a scale from 0 to 1 (see Figure 5.7).

In line with an attenuated animate-inanimate distinction in the BODY domain, the differences in the strength of the animate-inanimate distinction across domains were substantially attenuated, both among older children and particularly among younger children, as compared to adults.

In terms of variability, both older and younger children appear, if anything, to have demonstrated the reverse pattern to that of adults: BODY scores appear to have been more variable for inanimate than animate characters, and HEART and MIND scores appear to have been roughly equally variable for animate and inanimate characters among children. Moreover, covariance relationships among these three aspects of mental life appeared to be no clearer or stronger among animates than they were among inanimates. In my view, there were no clear indications of substantial development between early and middle childhood in these aspects of the deployment of conceptual representations of mental life, suggesting that this kind of fine tuning might be ongoing well into middle childhood—perhaps into adolescence or beyond. (See Table 5.8 for all standard deviations and correlations.)

In sum, while I characterized adults as conceptualizing animate beings as entities who vary more dramatically in their BODY and HEART capacities than inanimate objects (and for whom all three aspects of mental life are more closely related), I do not consider Studies 2-4 to offer strong evidence that differences in perceived variability in mental capacities or differences in perceived relationships among different aspects of mental life are important parts of children’s animate-inanimate distinction. Instead, these studies suggest that the primary role of the animate-inanimate distinction in 4- to 9-year-old children’s attributions of mental life seems to be governing their “average” attributions of physiological sensations (BODY)—and to a lesser degree, social-emotional (HEART) and perceptual cognitive abilities (MIND)—to various entities in their world.

Beyond the animate-inanimate distinction, there were more general age-related differences that emerged from this analysis of the deployment of conceptual representations of mental life to various beings in the world. (See Figure 5.7 for a summary of comparisons across age groups in all studies.) The most striking and consistent was in the HEART domain: Across all child samples in Studies 2-4, both older and younger children tended to grant both animate and inanimate characters more HEART abilities than did adults. In Study 2 and Study 4 children in both age groups also granted both “edge cases” (beetles and robots) more BODY abilities than did adults, but this general age-related difference did not extend to the wider set of “diverse characters” featured in Study 3 (instead, in this study, children appeared to under-attribute BODY to animate characters, while continuing to over-attribute BODY to inanimate characters). Across studies, these over-attributions of HEART and (when relevant) BODY declined with age (i.e., became more adult-like). Finally, there were some hints that 4- to 6-year-old children might have under-attributed MIND to both animate and inanimate characters, relative to adults (Study 3; but cf. Study 4), and, relatedly, that both 4- to 6-year-old and 7- to 9-year-old children’s attributions of MIND to animate and inanimate characters increased (i.e., became more adult-like) with age (Studies 2 and 3; but cf. Study 4).

Chapter conclusion

In this chapter, I explored a third aspect of conceptual representations of mental life among US children and adults: The deployment of these representations in reasoning about particular entities in the world. I focused in particular on the role of the classic distinction between “animate beings” (primarily, humans and other biological animals) and “inanimate objects” (in this case, technologies as well as inert objects) in attributions of BODY, HEART, and MIND.

These studies are consistent with the following theory: By the preschool years, US children’s animate-inanimate distinction includes an awareness that animate beings are more likely than inanimate objects to have physiological sensations like hunger, pain, and fatigue (what I have called BODY). This continues to be the primary axis of the distinction between the mental lives of animates vs. inanimates throughout development, increasing in size and reliability over early and middle childhood (and perhaps beyond); ultimately, US adults perceive the BODY domain to be the site of the most dramatic and robust differences in the mental lives of animate beings vs. inanimate objects.

At all ages, animates and inanimates are also perceived to differ in their social-emotional abilities (HEART) and perceptual-cognitive capacities (MIND), but among children as well as adults these differences are smaller and more variable across the particular beings in question.

Finally, at some point in later childhood or adolescence, US children come to acquire adults’ intuition that animate beings are distinct from inanimate objects not only in that their mental capacities are, on average, superior (especially in the BODY domain)—but also in that their mental capacities are more variable across specific entities and more correlated across domains (BODY, HEART, and MIND). These nuances—which might be characterized as “over-hypotheses” about the mental lives of animates vs. inanimates (Goodman, 1955)—appear not to have emerged by the age of 7-9y and may instead develop later in childhood or adolescence.

In addition to this emergent theory of the refinement of mental capacity attributions to animate vs. inanimate beings, these studies also suggest that—regardless of animacy status—children may have a tendency to over-attribute both the physiological sensations of the BODY and especially the social-emotional abilities of the HEART to many entities in the world, coupled with a (weaker) tendency to under-attribute the perceptual-cognitive abilities of the MIND. The tendency to over-attribute HEART is particularly striking—it emerged robustly in all studies, and while attributions of HEART did appear to decline with age, they did not appear to reach “adult-like” levels even among the oldest children in these studies. This finding is consistent with the possibility that, well into middle childhood, children may maintain a general openness to untraditional social partners (both animate and inanimate).

As in previous chapters, these are not the only possible interpretation of the patterns of results presented here; I have intentionally stated these hypotheses in their strongest form, to facilitate confirmatory tests in future research. The primary role of the studies and analyses discussed here has been to inspire the hypothesis stated in the previous paragraph and to lay the foundation for these future studies.

This marks the end of my exploration of the large, rich datasets emerging from Studies 1-4. In the next and final chapter, I step back to reflect on what these three “passes” at analysis have revealed about conceptual development in this domain, how these three aspects of conceptual development (conceptual units, relational organization, and deployment) might be related to one other, and what this case study of representations of mental life might reveal about conceptual development more broadly.

References

Gelman, R., & Spelke, E. S. (1981). The development of thoughts about animate and inanimate objects: Implications for research on social cognition. In J. H. Flavell & L. Ross (Eds.), Social Cognitive Development: Frontiers and Possible Futures (pp. 43–66). Cambridge, England: Cambridge University Press.

Gelman, S., & Opfer, J. (2002). Development of the animate-inanimate distinction. In U. Goswami (Ed.), Blackwell handbook of childhood cognitive development (pp. 151–166). https://doi.org/10.1002/9781444325485.ch8

LS0tCnRpdGxlOiAiQ2hhcHRlciBWOiBDaGFuZ2VzIGluIGRlcGxveW1lbnQgb2YgdGhlIGNvbmNlcHQiCm91dHB1dDoKICB3b3JkX2RvY3VtZW50OgogICAgcmVmZXJlbmNlX2RvY3g6ICIuL3dvcmQtc3R5bGVzLXJlZmVyZW5jZS5kb2N4IgphbHdheXNfYWxsb3dfaHRtbDogeWVzCmJpYmxpb2dyYXBoeTogLi9iaWJsaW9ncmFwaHkvZGlzc2JpYi5iaWIKY3NsOiAuL2JpYmxpb2dyYXBoeS9hcGEuY3NsCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNjcsCiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gRiwgZWNobyA9IEYpCmBgYAoKYGBge3J9CiMgIyBmb3Iga25pdHRpbmcgdG8gLmRvY3gKIyBvdXRwdXQ6CiMgICB3b3JkX2RvY3VtZW50OgojICAgICByZWZlcmVuY2VfZG9jeDogIi4vd29yZC1zdHlsZXMtcmVmZXJlbmNlLmRvY3giCiMgYWx3YXlzX2FsbG93X2h0bWw6IHllcwoKIyAjIGZvciBrbml0dGluZyB0byAubmIuaHRtbCAKIyBvdXRwdXQ6CiMgICBodG1sX25vdGVib29rOgojICAgICB0b2M6IHllcwojICAgICB0b2NfZGVwdGg6IDQKIyAgICAgdG9jX2Zsb2F0OiB5ZXMKYGBgCgpgYGB7cn0KIyBydW4gdXItc2V0dXAgc2NyaXB0ICh3aGljaCBydW5zIG90aGVyIHNjcmlwdHMpCnNvdXJjZSgiLi9zY3JpcHRzL19TRVRVUC5SIikKCiMgbG9hZCBpbiBFRkFzICYgbmFtZXMgZnJvbSBDaGFwdGVycyBJSUkgJiBJVgpzb3VyY2UoIi4vc2NyaXB0cy9zdG9yZWRfY2gwMy5SIikKc291cmNlKCIuL3NjcmlwdHMvc3RvcmVkX2NoMDQuUiIpCmBgYAoKCiMgQ2hhcHRlciBvdmVydmlldwoKSW4gdGhpcyBjaGFwdGVyLCBJIGZvY3VzIG9uIHRoZSB0aGlyZCBvZiBteSB0aHJlZSBrZXkgcXVlc3Rpb25zIGFib3V0IHRoZSBkZXZlbG9wbWVudCBvZiByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmU6IF9Ib3fCoGRvIHBlb3BsZSBvZiBkaWZmZXJlbnQgYWdlcyBkZXBsb3kgdGhlaXIgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgdG8gcmVhc29uIGFib3V0IHNwZWNpZmljIGVudGl0aWVzIGluIHRoZSB3b3JsZD9fIEV2ZW4gbW9yZSB0aGFuIG90aGVyIGNoYXB0ZXJzLCB0aGlzIHF1ZXN0aW9uIGNvbWVzIHRvIGxpZmUgbW9zdCB2aXZpZGx5IGluIHRoZSBjb250ZXh0IG9mIGRldmVsb3BtZW50YWwgY29tcGFyaXNvbnM7IHRoZXJlZm9yZSBJIGRyYXcgcHJpbWFyaWx5IG9uIGRhdGEgZnJvbSBTdHVkaWVzIDItNCwgd2hpY2ggaW5jbHVkZWQgYm90aCBhZHVsdCBhbmQgY2hpbGQgc2FtcGxlcy4gRm9yIGRldGFpbHMgYWJvdXQgdGhlIG1ldGhvZHMgb2YgYWxsIHN0dWRpZXMsIHNlZSBDaGFwdGVyIElJLiBUaGUgZ29hbCBvZiB0aGlzIGNoYXB0ZXIgaXMgdG8gcHJvdmlkZSAic25hcHNob3RzIiBvZiBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIHRvIHZhcmlvdXMgdGFyZ2V0IGNoYXJhY3RlcnMgaW4gZWFybHkgY2hpbGRob29kLCBtaWRkbGUgY2hpbGRob29kLCBhbmQgYWR1bHRob29kLCBhbmQgdG8gZXhwbG9yZSBpbiBmaW5lci1ncmFpbmVkIGRldGFpbCBtb3JlIGNvbnRpbnVvdXMgY2hhbmdlcyBpbiBjaGlsZHJlbidzIGJlbGllZnMgYWJvdXQgdGhlIG1lbnRhbCBsaXZlcyBvZiB0aGVzZSBjaGFyYWN0ZXJzIGJldHdlZW4gNC05eSBvZiBhZ2UuCgpUbyBzdHJ1Y3R1cmUgdGhpcyBleHBsb3JhdGlvbiwgSSBmb2N1cyBpbiBwYXJ0aWN1bGFyIG9uIGFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGluIGNoaWxkcmVuJ3MgYW5kIGFkdWx0cyBhc3Nlc3NtZW50cyBvZiBhbmltYXRlIGJlaW5ncyB2cy4gaW5hbmltYXRlIGJlaW5ncy4gQXMgZGlzY3Vzc2VkIGluIENoYXB0ZXIgSSwgdGhlIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGhhcyBiZWVuIHRoZSB0b3BpYyBvZiBleHRlbnNpdmUgZW1waXJpY2FsIGFuZCB0aGVvcmV0aWNhbCBpbiBib3RoIGNvZ25pdGl2ZSBhbmQgZGV2ZWxvcG1lbnRhbCBwc3ljaG9sb2d5LCBleHRlbmRpbmcgYmFjayBhdCBsZWFzdCBhcyBmYXIgYXMgUGlhZ2V0LCB3aXRoIHJvb3RzIGluIHNvbWUgb2YgdGhlIGVhcmxpZXN0IGRpc2N1c3Npb25zIG9mIG1lbnRhbCBsaWZlIGluIHRoZSBXZXN0ZXJuIHRyYWRpdGlvbi4gSW4gdGhlIHBhc3QgZmV3IGRlY2FkZXMsIGVtcGlyaWNhbCB3b3JrIG9uIHRoZSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBoYXMgZm9jdXNlZCBpbiBwYXJ0aWN1bGFyIG9uIGRpZmZlcmVuY2VzIGJldHdlZW4gYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMgaW4gdGhlaXIgYmVoYXZpb3JzIChlLmcuLCB0aGVpciBhYmlsaXR5IHRvIGVuZ2FnZSBpbiBzZWxmLXByb3BlbGxlZCBtb3ZlbWVudHMgb3IgdG8gZWZmZWN0IGNhdXNhbCBjaGFuZ2VzIGluIHRoZSB3b3JsZCksIHRoZWlyIG9ic2VydmFibGUgcHJvcGVydGllcyAoZS5nLiwgaGF2aW5nIGV5ZXMgYW5kIGZhY2VzLCBjb250YWluaW5nIGJsb29kLCBoYXZpbmcgb3JnYW5zIG9uIHRoZSBpbnNpZGUpLCBhbmQgdGhlIGJpb2xvZ2ljYWwgcHJvY2Vzc2VzIHRoYXQgdGhleSBlbmdhZ2UgaW4gb3IgYXJlIHN1YmplY3RlZCB0byBbZS5nLiwgZ3Jvd3RoLCByZXByb2R1Y3Rpb24sIGRlYXRoOyBzZWUgQEdlbG1hbjE5ODFhOyBAR2VsbWFuMjAwMiBmb3IgcmV2aWV3c10uIFNvbWUgc3R1ZGllcyBoYXZlIGFsc28gZXhwbG9yZWQgY2hpbGRyZW4ncyBkZXZlbG9waW5nIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1pbmRzIG9mIGFuaW1hdGUgYmVpbmdz4oCUYnV0IG5vdCB3aXRoIHRoZSBzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgdGhlIGN1cnJlbnQgYW5hbHlzaXMgb2YgbmF0dXJhbGx5IG9jY3VycmluZyAiY29uY2VwdHVhbCB1bml0cy4iIEluIHRoaXMgY2hhcHRlciwgSSBhaW0gdG8gcHVzaCB0aGlzIGFzcGVjdCBvZiB0aGUgZmllbGQncyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBmb3J3YXJkIGJ5IHByb3ZpZGluZyBhIHN0cnVjdHVyZWQgYW5hbHlzaXMgb2YgYXR0cmlidXRpb25zIG9mIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyAoQk9EWSksIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIChIRUFSVCksIGFuZCBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBjYXBhY2l0aWVzIChNSU5EKSB0byBhbmltYXRlIHZzLiBpbmFuaW1hdGUgYmVpbmdzIGluIGxhcmdlIHNhbXBsZXMgb2YgNC0gdG8gOS15ZWFyLW9sZCBVUyBjaGlsZHJlbiBhbmQgYWR1bHRzLgoKCiMgR2VuZXJhbCBhbmFseXNpcyBwbGFuCgojIyBIaWdoLWxldmVsIG92ZXJ2aWV3CgpJbiBhbmFseXppbmcgdGhlc2UgZGF0YXNldHMgd2l0aCBhbiBleWUgdG93YXJkIGRvY3VtZW50aW5nIHRoZSBhcHBsaWNhdGlvbiBvciBkZXBsb3ltZW50IG9mIHRoZSBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBkZXNjcmliZWQgaW4gQ2hhcHRlcnMgSUlJLUlWLCB0aGUgYmFzaWMgaW5zaWdodCBpcyB0aGF0IHRoZSBhdHRyaWJ1dGlvbiBvZiBzcGVjaWZpYyBtZW50YWwgY2FwYWNpdGllcyB0byBzcGVjaWZpYyB0YXJnZXQgY2hhcmFjdGVycyBwcm92aWRlcyBldmlkZW5jZSBvZiBob3cgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgYXJlIGRlcGxveWVkIGluIGV2ZXJ5ZGF5IHNvY2lhbCBjb2duaXRpb24uIEluIENoYXB0ZXIgSUksIEkgaWxsdXN0cmF0ZWQgdGhpcyB3aXRoIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTogSWYgcGFydGljaXBhbnRzIHdobyBhc3Nlc3MgdGhlIG1lbnRhbCBjYXBhY2l0aWVzIG9mIENoYXJhY3RlcnMgMSwgMiwgYW5kIDMgc2hhcmUgb25lIGdlbmVyYWwgcGF0dGVybiBvZiBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLCBhbmQgcGFydGljaXBhbnRzIHdobyBhc3Nlc3MgdGhlIG1lbnRhbCBjYXBhY2l0aWVzIG9mIENoYXJhY3RlcnMgNCwgNSwgYW5kIDYgc2hhcmUgYW5vdGhlciBwYXR0ZXJuLCB0aGlzIHByb3ZpZGVzIHNvbWUgZXZpZGVuY2UgdGhhdCBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBtaWdodCBwbGF5IGEgcm9sZSBpbiBzdHJ1Y3R1cmluZyByZXByZXNlbnRhdGlvbnMgb2YgKGFuZCBpbnRlcmFjdGlvbnMgd2l0aCkgZGlmZmVyZW50IGNsYXNzZXMgb2YgYmVpbmdzIGluIHRoZSB3b3JsZC4gSGVyZSBJIHdpbGwgdHJhbnNsYXRlIHRoaXMgZ2VuZXJhbCBpbnR1aXRpb24gaW50byBhIHNwZWNpZmljIGFuYWx5c2lzIHBsYW4gdG8gYmUgYXBwbGllZCB0byBlYWNoIG9mIHRoZXNlIGRhdGFzZXRzIGluIHR1cm4uIAoKIyMgRGV0YWlscyBvZiBhbmFseXNlcwoKYGBge3J9CmFuaW1fbG9va3VwIDwtIGRhdGEuZnJhbWUoY2hhcmFjdGVyID0gbGV2ZWxzKHNjb3Jlc19hbGwkY2hhcmFjdGVyKSkgJT4lCiAgbXV0YXRlKGFuaW1faW5hbiA9IGNhc2Vfd2hlbigKICAgIGNoYXJhY3RlciAlaW4lIGMoImFkdWx0IiwgImNoaWxkIiwgImluZmFudCIsIAogICAgICAgICAgICAgICAgICAgICAicGVyc29uIGluIGEgcGVyc2lzdGVudCB2ZWdldGF0aXZlIHN0YXRlIiwgCiAgICAgICAgICAgICAgICAgICAgICJwZXJzb24gaW4gYSBQVlMiLCAiZmV0dXMiLCAiY2hpbXBhbnplZSIsIAogICAgICAgICAgICAgICAgICAgICAiZWxlcGhhbnQiLCAiZG9scGhpbiIsICJiZWFyIiwgImRvZyIsICJnb2F0IiwgCiAgICAgICAgICAgICAgICAgICAgICJtb3VzZSIsICJmcm9nIiwgImJsdWUgamF5IiwgImJpcmQiLCAiZmlzaCIsIAogICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgIm1pY3JvYmUiKSB+ICJhbmltYXRlIiwKICAgIGNoYXJhY3RlciAlaW4lIGMoInJvYm90IiwgImNvbXB1dGVyIiwgImNhciIsICJ0ZWRkeSBiZWFyIiwgCiAgICAgICAgICAgICAgICAgICAgICJkb2xsIiwgInN0YXBsZXIiKSB+ICJpbmFuaW1hdGUiLAogICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgYW5pbV9pbmFuID0gZmFjdG9yKGFuaW1faW5hbiwgbGV2ZWxzID0gYygiYW5pbWF0ZSIsICJpbmFuaW1hdGUiKSkpCmBgYAoKQWxsIGFuYWx5c2VzIGluIHRoaXMgY2hhcHRlciBtYWtlIHVzZSBvZiB0aGUgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjYWxlcyBkZXZlbG9wZWQgaW4gQ2hhcHRlciBJViB0byBzdW1tYXJpemUgcGFydGljaXBhbnRzJyByZXNwb25zZXMgaW4gdGVybXMgb2YgdGhlIGNvbmNlcHR1YWwgdW5pdHMgaWRlbnRpZmllZCBhbW9uZyBhZHVsdHMgaW4gZWFjaCBzdHVkeSAoYXMgcHJlc2VudGVkIGluIENoYXB0ZXIgSUlJKS4gCgpGb3IgZWFjaCBzdHVkeSwgSSBjb25kdWN0IHR3byBhbmFseXNlcyBvZiBzY29yZXMgZWFjaCBvZiB0aGVzZSB0aHJlZSBkb21haW5zIChCT0RZLCBIRUFSVCwgYW5kIE1JTkQpLCB2aWEgQmF5ZXNpYW4gcmVncmVzc2lvbnMuIEZpcnN0LCBJIGNvbXBhcmUgYWdlIGdyb3VwcyAoZS5nLiwgYWR1bHRzIHZzLiBjaGlsZHJlbiksIHdpdGggYW4gZXllIHRvd2FyZCBhc3Nlc3NpbmcgYm90aCBvdmVyYWxsIGRpZmZlcmVuY2VzIGJldHdlZW4gYWdlIGdyb3VwcyBhbmQgZGlmZmVyZW50aWFsIHNlbnNpdGl2aXR5IHRvIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGFuaW1hdGUgYmVpbmdzIHZzLiBpbmFuaW1hdGUgb2JqZWN0cyBpbiB0aGF0IGRvbWFpbi4gU2Vjb25kLCBJIGV4YW1pbmUgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgd2l0aGluIHRoZSBjaGlsZCBzYW1wbGVzLCBhZ2FpbiB3aXRoIGFuIGV5ZSB0b3dhcmQgYXNzZXNzaW5nIG92ZXJhbGwgaW5jcmVhc2VzIG9yIGRlY3JlYXNlcyBpbiBhdHRyaWJ1dGlvbnMgd2l0aCBpbmNyZWFzaW5nIGFnZSBhcyB3ZWxsIGFzIGluY3JlYXNlcyBvciBkZWNyZWFzZXMgaW4gY2hpbGRyZW4ncyBzZW5zaXRpdml0eSB0byB0aGUgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gaW4gdGhhdCBkb21haW4uIEZvciBhbGwgYW5hbHlzZXMsIEkgY29uZHVjdCBCYXllc2lhbiByZWdyZXNzaW9ucyBvbiByYXcgc2NvcmVzICh3aGljaCByYW5nZWQgZnJvbSAwLTEgZm9yIGVhY2ggZG9tYWluKSwgaW5jbHVkaW5nIG1heGltYWwgcmFuZG9tIGVmZmVjdHMgc3RydWN0dXJlcyAoY29udGluZ2VudCBvbiB0aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiB0aGUgc3R1ZHkgYW5kIHRoZSB3aXRoaW4tIHZzIGJldHdlZW4tc3ViamVjdHMgZGVzaWduIG9mIHRoZSBzdHVkeSkuCgpGb3IgdHdvIG9mIHRoZXNlIHN0dWRpZXPigJRTdHVkeSAyIGFuZCBTdHVkeSA0LCB3aGljaCBib3RoIGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGVtcGlyaWNhbCBhcHByb2FjaOKAlHRoZSBjb21wYXJpc29uIGJldHdlZW4gImFuaW1hdGUgYmVpbmdzIiBhbmQgImluYW5pbWF0ZSBvYmplY3RzIiBpcyByZWR1bmRhbnQgd2l0aCBhIGZ1bGwgY29tcGFyaXNvbiBvZiBhbGwgdGFyZ2V0IGNoYXJhY3RlcnMgaW5jbHVkZWQgaW4gdGhlIHN0dWR5LiBUbyBtYXhpbWl6ZSBjb21wYXJhYmlsaXR5IChhbmQgbWluaW1pemUgdW5uZWNlc3NhcnkgY29tcGxleGl0eSksIEkgaGF2ZSBjaG9zZW4gdG8gYW5hbHl6ZSBTdHVkeSAzIGluIGEgc2ltaWxhciB3YXksIGxvb2tpbmcgYXQgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gZ3JvdXBzIG9mIHRhcmdldCBjaGFyYWN0ZXJzIChmaXZlIGFuaW1hdGUgYmVpbmdzIHZzLiBmb3VyIGluYW5pbWF0ZSBvYmplY3RzKSByYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGFuYWx5emUgYWxsIHBvc3NpYmxlIGRpZmZlcmVuY2VzIGFtb25nIHRoZSBuaW5lICJkaXZlcnNlIGNoYXJhY3RlcnMiIGluY2x1ZGVkIGluIHRoYXQgc3R1ZHkuCgpJbiBhZGRpdGlvbiB0byB0aGVzZSBzdHVkeS1zcGVjaWZpYyBhbmFseXNlcywgSSBpbmNsdWRlIGJvdGggdmlzdWFsIGFuZCBudW1lcmljYWwgc3VtbWFyaWVzIG9mIGZpbmRpbmdzIGFjcm9zcyBzdHVkaWVzIGFuZCBzYW1wbGVzIGluIHRoZSBHZW5lcmFsIERpc2N1c3Npb24sIGFzIHdlbGwgYXMgYW4gYWRkaXRpb25hbCByZWdyZXNzaW9uIGFuYWx5c2lzIGFpbWVkIGF0IGNvbXBhcmluZyB0aGUgZGVncmVlIG9mIHRoZSBhbmltYXRlLWRpc3RpbmN0aW9uIGFjcm9zcyBkb21haW5zIChCT0RZLCBIRUFSVCwgYW5kIE1JTkQpIGFuZCBhZ2UgZ3JvdXBzIChhZHVsdHMsIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4sIGFuZCA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuKSwgcG9vbGluZyBkYXRhIGZyb20gU3R1ZGllcyAyLTQuIFRoaXMgYW5hbHlzaXMgYWdhaW4gaW5jbHVkZXMgYSBtYXhpbWFsIHJhbmRvbSBlZmZlY3RzIHN0cnVjdHVyZSAocmFuZG9tIGludGVyY2VwdHMgZm9yIHBhcnRpY2lwYW50cyBuZXN0ZWQgd2l0aGluIHN0dWRpZXMgYW5kIGZvciBzcGVjaWZpYyB0YXJnZXQgY2hhcmFjdGVycyk7IHJhdGhlciB0aGFuIGJlaW5nIGNvbmR1Y3RlZCBvdmVyIHJhdyBzY29yZXMgKHdoaWNoIHJhbmdlZCBmcm9tIDAtMSksIGl0IGlzIGNvbmR1Y3RlZCBvdmVyIGNlbnRlcmVkIHNjb3JlcyAoY2VudGVyZWQgdG8gcmFuZ2UgZnJvbSAtMC41IHRvICswLjUpLiBTZWUgVGFibGUgNS43LCBjYXB0aW9uLCBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBjb2Rpbmcgb2YgdGhlIHBhcmFtZXRlcnMgaW5jbHVkZWQgaW4gdGhpcyBhbmFseXNpcy4KCgojIFN0dWR5IDI6IENvbmNlcHR1YWwgY2hhbmdlIGJldHdlZW4gbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkgYW5kIGFkdWx0aG9vZAoKSW4gdGhlIGNvbnRleHQgb2YgdGhpcyBkaXNzZXJ0YXRpb24sIFN0dWR5IDIgc2VydmVzIHRvIHByb3ZpZGUgYW4gaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIG9mIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBlYXJsaWVyIGluIGRldmVsb3BtZW50LCBpbiB3aGF0IEkgaGF2ZSBjYWxsZWQgbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkuIEluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBjaGFuZ2VzIGluIHRoZSBkZXBsb3ltZW50IG9mIHRoaXMgY29uY2VwdCBiZXR3ZWVuIG1pZGRsZSBjaGlsZGhvb2QgYW5kIGFkdWx0aG9vZDogSG93IGRvIFVTIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGNvbXBhcmUgdG8gdGhvc2Ugb2YgYWR1bHRzIGluIHRoZWlyIGN1bHR1cmFsIGNvbnRleHQ/CgpUbyByZXZpZXcsIGluIFN0dWR5IDIsIGByIG5yb3coZDJfYWRfd2lkZSlgIFVTIGFkdWx0cyBhbmQgYHIgbnJvdyhkMl83OV93aWRlKWAgVVMgY2hpbGRyZW4gYmV0d2VlbiB0aGUgYWdlcyBvZiBgciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkMl83OSRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSkgZWFjaCBhc3Nlc3NlZCBhIHNpbmdsZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiBUaGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCB3aXRoIHBhcnRpY2lwYW50cyByYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3MgZWl0aGVyIGEgYmVldGxlIG9yIGEgcm9ib3QuIChTZWUgQ2hhcHRlciBJSSBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyBTcGVjaWFsIG5vdGVzIG9uIGRhdGEgcHJvY2Vzc2luZyBhbmQgYW5hbHlzaXMKClRvIGZhY2lsaXRhdGUgY29tcGFyaXNvbiBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMiwgSSB1c2UgYWR1bHRzJyBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzIChhcyBkZXNjcmliZWQgaW4gQ2hhcHRlciBJVikgdG8gYW5hbHl6ZSBib3RoIGFnZSBncm91cHMuCgojIyBSZXN1bHRzCgpgYGB7cn0KZDJfNzlhZF9zY29yZWRfYWQgPC0gZnVsbF9qb2luKGQyX2FkX3Njb3JlZF9hZCwgZDJfNzlfc2NvcmVkX2FkKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gbGV2ZWxzKGQyX2FkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpKSwKICAgICAgICAgYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCkpCgpjb250cmFzdHMoZDJfNzlhZF9zY29yZWRfYWQkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2VkZ2UKY29udHJhc3RzKGQyXzc5YWRfc2NvcmVkX2FkJGZhY3RvcikgPC0gY29udHJhc3RzX2NudDNfZmFjdG9yCmNvbnRyYXN0cyhkMl83OWFkX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KY29udHJhc3RzKGQyXzc5YWRfc2NvcmVkX2FkJGFnZV9ncm91cCkgPC0gY29udHJhc3RzX2R1bTJfYWdlZ3AKYGBgCgojIyMgQ2hpbGRyZW4gdnMuIGFkdWx0cwoKYGBge3J9CmQyXzc5YWRfbWVhbnMgPC0gZDJfNzlhZF9zY29yZWRfYWQgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBjaGFyYWN0ZXIsIGZhY3RvcikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKQpgYGAKClNlZSBGaWd1cmUgNS4xLCBwYW5lbCBBLCBmb3IgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjb3JlcyBmb3IgYm90aCB0YXJnZXQgY2hhcmFjdGVycyBhbW9uZyB0aGUgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBhbmQgYWR1bHRzIGluIFN0dWR5IDIuCgpJbiB0aGUgYWdncmVnYXRlLCBib3RoIGNoaWxkcmVuIGFuZCBhZHVsdHMgc2VlbSB0byBoYXZlIGNvbnNpZGVyZWQgdGhlIGJlZXRsZeKAlHRoZSBhbmltYXRlICJlZGdlIGNhc2UiIGZlYXR1cmVkIGluIHRoaXMgc3R1ZHnigJR0byBiZSBhIGJlaW5nIHdpdGggYSBtb2RlcmF0ZWx5IGhpZ2ggZGVncmVlIG9mIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyAobWVhbiBfQk9EWV8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCAiYmVldGxlIilgOyBhbW9uZyBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkJPRFkiLCAiY2hpbGRyZW43OSIsICJiZWV0bGUiKWApIGFuZCBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBjYXBhY2l0aWVzIChtZWFuIF9NSU5EXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJNSU5EIiwgImFkdWx0cyIsICJiZWV0bGUiKWA7IGFtb25nIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjc5IiwgImJlZXRsZSIpYCkuIEhvd2V2ZXIsIGFkdWx0cyBhbmQgY2hpbGRyZW4gYXBwZWFyIHRvIGhhdmUgZGl2ZXJnZWQgaW4gdGhlaXIgYXNzZXNzbWVudHMgb2YgaXRzIGFiaWxpdGllcyBpbiB0aGUgSEVBUlQgZG9tYWluOiBXaGlsZSBhZHVsdHMgdGVuZGVkIHRvIGdyYW50IHZlcnkgbGl0dGxlIGluIHRoZSB3YXkgb2Ygc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgKG1lYW4gX0hFQVJUXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJIRUFSVCIsICJhZHVsdHMiLCAiYmVldGxlIilgKSwgY2hpbGRyZW4ncyBfSEVBUlRfIHNjb3JlcyB0ZW5kZWQgdG8gaG92ZXIgYXJvdW5kIHRoZSBtaWRwb2ludCBvZiB0aGUgc2NhbGUgKG1lYW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJIRUFSVCIsICJjaGlsZHJlbjc5IiwgImJlZXRsZSIpYCkuCgpGb3IgdGhlIHJvYm904oCUdGhlIGluYW5pbWF0ZSAiZWRnZSBjYXNlIiBmZWF0dXJlZCBpbiB0aGlzIHN0dWR54oCUYm90aCBhZHVsdHMgYW5kIGNoaWxkcmVuLCBpbiB0aGUgYWdncmVnYXRlLCBpbmRpY2F0ZWQgYSBoaWdoIGRlZ3JlZSBvZiBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgKG1lYW4gX01JTkRfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIk1JTkQiLCAiYWR1bHRzIiwgInJvYm90IilgOyBhbW9uZyBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW43OSIsICJyb2JvdCIpYCksIGFuZCBhcHBlYXJlZCB0byBhZ3JlZSB0aGF0IHRoZSByb2JvdCBoYWQgbGVzcyBpbiB0aGUgd2F5IG9mIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyBhbmQgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgdGhhbiB0aGUgYmVldGxlLiBIb3dldmVyLCB0aGUgdHdvIGFnZSBncm91cHMgYXBwZWFyIHRvIGhhdmUgZGl2ZXJnZWQgaW4gdGhlaXIgYXNzZXNzbWVudHMgb2YgdGhlIGFic29sdXRlIGRlZ3JlZSBvZiBCT0RZIGFuZCBIRUFSVCB0aGF0IHRoZXkgd2VyZSB3aWxsaW5nIHRvIGdyYW50IHRoZSByb2JvdDogQWR1bHRzIGdyYW50ZWQgdmVyeSBsaXR0bGUgaW4gZWl0aGVyIGRvbWFpbiAobWVhbiBfQk9EWV8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJCT0RZIiwgImFkdWx0cyIsICJyb2JvdCIpYDsgbWVhbiBfSEVBUlRfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiSEVBUlQiLCAiYWR1bHRzIiwgInJvYm90IilgKSwgd2hpbGUgY2hpbGRyZW4gZ3JhbnRlZCBtaWRkbGluZyBhYmlsaXRpZXMgaW4gYm90aCBkb21haW5zIChtZWFuIF9CT0RZXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkJPRFkiLCAiY2hpbGRyZW43OSIsICJyb2JvdCIpYDsgbWVhbiBfSEVBUlRfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW43OSIsICJyb2JvdCIpYCkuCgpgYGB7cn0KZmlndXJlNS4xX3Bsb3RzIDwtIGNoYXJhY3Rlcl9tdWx0aXBsb3RfYWdlKAogIGRmX3Njb3JlZCA9IGZ1bGxfam9pbihkMl9hZF9zY29yZWRfYWQsIGQyXzc5X3Njb3JlZF9hZCksIAogIHNob3dfYW5pbV9ieV9zdWJqID0gVCwKICBhZ2VfbGV2ZWxzID0gYygiY2hpbGRyZW43OSIsICJhZHVsdHMiKSwKICBhZ2VfbGFiZWxzID0gYygiQ2hpbGRyZW4sIDctOXkiLCAiQWR1bHRzIiksCiAgcGxvdF9tYXJnX3VwcGVyID0gLTQ1LCBheGlzX2hlaWdodCA9IDAuMDkpCmBgYAoKYGBge3J9CmZpZ3VyZTUuMV9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjFfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNS4xOiBBdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFtb25nIGNoaWxkcmVuICg3LTl5KSBhbmQgYWR1bHRzIGluIFN0dWR5IDIuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBQbG90cyBpbmNsdWRlIChBKSBzY29yZXMgYnkgdGFyZ2V0IGNoYXJhY3RlciwgYW5kIChCKSBkaXN0cmlidXRpb25zIG9mIHNjb3Jlcy4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4iLCA5MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC44fQpnZ2RyYXcoZmlndXJlNS4xX3Bsb3RzX2NhcCkKYGBgCgpgYGB7cn0KZDJfNzlhZF9udGlsZXMgPC0gZDJfNzlhZF9zY29yZWRfYWQgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBmYWN0b3IpICU+JQogIG11dGF0ZShiaW4gPSBjdXQoc2NvcmUsIDEzKSwKICAgICAgICAgYmluX251bSA9IGFzLm51bWVyaWMoZmFjdG9yKGJpbikpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgY291bnQoYWdlX2dyb3VwLCBmYWN0b3IsIGJpbiwgYmluX251bSkgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBmYWN0b3IpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obikpCmQyXzc5YWRfbnRpbGVzCmBgYAoKYGBge3J9CiMgcl9kMl9kZXZncF9CT0RZIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiQk9EWSIpLAojICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZncF9CT0RZLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZncF9CT0RZIikKCnJfZDJfZGV2Z3BfQk9EWSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX0JPRFkiKQoKc3VtbWFyeShyX2QyX2RldmdwX0JPRFkpCmBgYAoKYGBge3J9CiMgcl9kMl9kZXZncF9IRUFSVCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldmdwX0hFQVJULCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZncF9IRUFSVCIpCgpyX2QyX2RldmdwX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2Z3BfSEVBUlQiKQoKc3VtbWFyeShyX2QyX2RldmdwX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDJfZGV2Z3BfTUlORCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIk1JTkQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDJfZGV2Z3BfTUlORCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2Z3BfTUlORCIpCgpyX2QyX2RldmdwX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZncF9NSU5EIikKCnN1bW1hcnkocl9kMl9kZXZncF9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDJfZGV2Z3AgPC0gcmVndGFiX2RldmdwX2Z1bigKICByZWdfYm9keSA9IHJfZDJfZGV2Z3BfQk9EWSwgCiAgcmVnX2hlYXJ0ID0gcl9kMl9kZXZncF9IRUFSVCwKICByZWdfbWluZCA9IHJfZDJfZGV2Z3BfTUlORCwKICBhZ2VfbGV2ZWxzID0gYygiYWdlX2dyb3VwX2NoaWxkIiksIAogIGFnZV9sYWJlbHMgPSBjKCJDaGlsZHJlbiB2cy4gYWR1bHRzIikpCmBgYAoKYGBge3J9CnRhYmxlNS4xIDwtIGRldmdwX3RhYmxlX2Z1bihyZWd0YWJfZGV2Z3AgPSByZWd0YWJfZDJfZGV2Z3AsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jaGFyYWN0ZXJzID0gMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lID0gIlRhYmxlIDUuMSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZHlfbmFtZSA9ICJTdHVkeSAyIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSAiNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9hZ2VfZ3JvdXBzID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJCZWV0bGUgdnMuIEdNIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS4xCmBgYAoKQSBzZXJpZXMgb2YgQmF5ZXNpYW4gcmVncmVzc2lvbiBhbmFseXNlcyBjb25maXJtZWQgdGhlc2UgZ2VuZXJhbCBpbXByZXNzaW9ucyAoc2VlIFRhYmxlIDUuMSBhbmQgRmlndXJlIDUuMSkuIENoaWxkcmVuJ3MgX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgdGhhbiBhZHVsdHMnLCBwYXJ0aWN1bGFybHkgZm9yIHRoZSByb2JvdDsgYXMgYSByZXN1bHQsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGJlZXRsZSBhbmQgdGhlIHJvYm90IHdhcyBhdHRlbnVhdGVkIGFtb25nIGNoaWxkcmVuLCByZWxhdGl2ZSB0byBhZHVsdHMgKGkuZS4sIHRoZSBpbnRlcmFjdGlvbiB0ZXJtIHdhcyBub24temVybykuIENoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgd2VyZSBhbHNvIGhpZ2hlciB0aGFuIGFkdWx0cycsIGJ1dCB0aGlzIGRpZmZlcmVuY2UgZGlkIG5vdCB2YXJ5IHN1YnN0YW50aWFsbHkgYWNyb3NzIHRhcmdldCBjaGFyYWN0ZXJzIC4gVGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gdGhlaXIgX01JTkRfIHNjb3Jlcy4KClRha2VuIHRvZ2V0aGVyLCB0aGVzZSBvYnNlcnZhdGlvbnMgaGlnaGxpZ2h0IG9uZSBlc3BlY2lhbGx5IHN0cmlraW5nIGRpZmZlcmVuY2UgYmV0d2VlbiBjaGlsZHJlbiBhbmQgYWR1bHRzOiBGb3IgYm90aCBlZGdlIGNhc2VzLCByZWdhcmRsZXNzIG9mIGFuaW1hY3kgc3RhdHVzLCBjaGlsZHJlbiBhdHRyaWJ1dGVkIHN1YnN0YW50aWFsbHkgbW9yZSBIRUFSVCB0aGFuIGRpZCBhZHVsdHMuIEluZGVlZCwgZnVsbHkgYHIgcm91bmQoKGQyXzc5YWRfbnRpbGVzICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiLCBmYWN0b3IgPT0gIkhFQVJUIiwgYmluX251bSA9PSAxKSkkcHJvcCwgMikqMTAwYCUgb2YgYWR1bHRzIGluIFN0dWR5IDIgaGFkIF9IRUFSVF8gc2NvcmVzIDwgYHIgZ3N1YigiXi4qLCIsICIiLCAoZDJfNzlhZF9udGlsZXMgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIsIGZhY3RvciA9PSAiSEVBUlQiLCBiaW5fbnVtID09IDEpKSRiaW4pICU+JSBnc3ViKCJcXF0iLCAiIiwgLikgJT4lIGFzLm51bWVyaWMoKSAlPiUgY2VpbGluZ19kZWMoMilgIChpLmUuLCBhbnN3ZXJlZCBhdCBtb3N0IF9vbmVfIG9mIHRoZSA2IF9IRUFSVF8gaXRlbXMgd2l0aCBhIHJlc3BvbnNlIG9mICJLSU5EQSwiIGFuZCBvdGhlcndpc2UgYW5zd2VyZWQgIk5PIiB0byBhbGwgX0hFQVJUXyBpdGVtcykuIFRoZSBtb3JlIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9mIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgYWNyb3NzIHRoZSAwLTEgcmFuZ2Ugc3RhbmRzIGluIHN0YXJrIGNvbnRyYXN0IHRvIHRoaXMgYWR1bHQgc3RhbmRhcmQ7IHNlZSBGaWd1cmUgNS4xLCBwYW5lbCBCLgoKIyMjIEFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gNy05eQoKSW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIEkgY29tcGFyZWQgdGhlIGF0dHJpYnV0aW9ucyBvZiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFzIGEgZ3JvdXAgdG8gdGhvc2Ugb2YgYWR1bHRzLiBIZXJlLCBJIGV4cGxvcmUgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgd2l0aGluIHRoZSBjaGlsZCBzYW1wbGU6IEhvdyBtaWdodCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBjaGFuZ2Ugb3ZlciB0aGUgYWdlIHJhbmdlIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHk/IAoKSWYgdGhlIHNuYXBzaG90cyBvZiBjaGlsZHJlbiB2cy4gYWR1bHRzIGFyZSByZWZsZWN0aXZlIG9mIF9kZXZlbG9wbWVudGFsXyBjaGFuZ2VzLCBJIHdvdWxkIGV4cGVjdCB0aGF0LCB3aXRoIGluY3JlYXNpbmcgYWdlLCBjaGlsZHJlbidzIHJlc3BvbnNlcyB3b3VsZCBiZWNvbWUgaW5jcmVhc2luZ2x5IGFkdWx0LWxpa2UuIEJhc2VkIG9uIHRoZSBhZ2UgZ3JvdXAgY29tcGFyaXNvbnMgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHRoaXMgd291bGQgbWVhbiB0aGF0IGFnZSB3b3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggbG93ZXIgX0JPRFlfIHNjb3JlcywgcGFydGljdWxhcmx5IGZvciB0aGUgcm9ib3Q7IGFuZCB3aXRoIGxvd2VyIF9IRUFSVF8gc2NvcmVzIGZvciBib3RoIHRhcmdldCBjaGFyYWN0ZXJzLgoKYGBge3J9CnBsb3RzX2QyX2RldiA8LSBjaGFyYWN0ZXJfZGV2cGxvdChkZl9zY29yZWRfYWQgPSBkMl9hZF9zY29yZWRfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZfc2NvcmVkX2NoID0gZDJfNzlfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmX2FnZSA9IGQyXzc5KQpgYGAKCmBgYHtyfQpmaWd1cmU1LjIgPC0gcGxvdHNfZDJfZGV2ICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDI6IENoaWxkcmVuLCA3LTl5IikKYGBgCgpgYGB7cn0KZmlndXJlNS4yX3Bsb3RzX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTUuMiwgc3RyX3dyYXAoIkZpZ3VyZSA1LjI6IENoYW5nZXMgaW4gYXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDIuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbmRpdmlkdWFsIGNoaWxkcmVuIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzOyBtZWFuIHNjb3JlcyBhbW9uZyBhZHVsdHMgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gTGluZXMgY29ycmVzcG9uZCB0byBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb25zIChmb3JtdWxhOiBzY29yZSB+IGFnZSkuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjV9CmdnZHJhdyhmaWd1cmU1LjJfcGxvdHNfY2FwKQpgYGAKCmBgYHtyfQpkMl83OWFnZV9zY29yZWRfYWQgPC0gZDJfNzlfc2NvcmVkX2FkICU+JQogIGxlZnRfam9pbihkMl83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGxldmVscyhkMl9hZF9zY29yZWRfYWQkY2hhcmFjdGVyKSksCiAgICAgICAgIGFnZV9jZW50ZXJlZCA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSkKCmNvbnRyYXN0cyhkMl83OWFnZV9zY29yZWRfYWQkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2VkZ2UKY29udHJhc3RzKGQyXzc5YWdlX3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDJfNzlhZ2Vfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpgYGAKCmBgYHtyfQojIHJfZDJfZGV2c2NvcmVfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldnNjb3JlX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX0JPRFkiKQoKcl9kMl9kZXZzY29yZV9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfQk9EWSIpCgpzdW1tYXJ5KHJfZDJfZGV2c2NvcmVfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2QyX2RldnNjb3JlX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OWFnZV9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkhFQVJUIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldnNjb3JlX0hFQVJULCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZzY29yZV9IRUFSVCIpCgpyX2QyX2RldnNjb3JlX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfSEVBUlQiKQoKc3VtbWFyeShyX2QyX2RldnNjb3JlX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDJfZGV2c2NvcmVfTUlORCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldnNjb3JlX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX01JTkQiKQoKcl9kMl9kZXZzY29yZV9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfTUlORCIpCgpzdW1tYXJ5KHJfZDJfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QyX2RldnNjb3JlIDwtIHJlZ3RhYl9kZXZzY29yZV9mdW4ocmVnX2JvZHkgPSByX2QyX2RldnNjb3JlX0JPRFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19oZWFydCA9IHJfZDJfZGV2c2NvcmVfSEVBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19taW5kID0gcl9kMl9kZXZzY29yZV9NSU5EKQpgYGAKCmBgYHtyfQp0YWJsZTUuMiA8LSBkZXZzY29yZV90YWJsZV9mdW4ocmVndGFiX2RldnNjb3JlID0gcmVndGFiX2QyX2RldnNjb3JlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgMiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX3JhbmdlID0gIjctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihkMl83OSRhZ2UsIG5hLnJtID0gVCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkJlZXRsZSB2cy4gR00iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjIKYGBgCgpJbiBmYWN0LCB0aGlzIGlzIGV4YWN0bHkgd2hhdCBJIG9ic2VydmUgYW1vbmcgdGhlIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gdGhpcyBzdHVkeSAoc2VlIFRhYmxlIDUuMiwgYW5kIEZpZ3VyZSA1LjIpLiAKCkluIGxpbmUgd2l0aCBhbiBhZHVsdC1saWtlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uLCBfQk9EWV8gc2NvcmVzIHdlcmUgZ2VuZXJhbGx5IGhpZ2hlciBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgdGhlIGJlZXRsZSAodGhlIGFuaW1hdGUgdGFyZ2V0IGNoYXJhY3RlcikgdGhhbiBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgdGhlIHJvYm90LiBXaXRoIGFnZSwgaG93ZXZlciwgY2hpbGRyZW4ncyBfQk9EWV8gc2NvcmVzIGdlbmVyYWxseSBkZWNyZWFzZWQsIGRyaXZlbiBieSBjaGFuZ2VzIGluIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIEJPRFkgdG8gdGhlIHJvYm90LiBBcyBhIHJlc3VsdCwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYmVldGxlIGFuZCB0aGUgcm9ib3QgaW5jcmVhc2VkIG92ZXIgdGhlIGFnZSByYW5nZSAoaS5lLiwgdGhlIGludGVyYWN0aW9uIHRlcm0gd2FzIG5vbi16ZXJvKS4KCk1lYW53aGlsZSwgY2hpbGRyZW4ncyBfSEVBUlRfIHNjb3JlcyBkaWQgbm90IGRpZmZlciByZWxpYWJseSBhY3Jvc3MgdGhlIHR3byB0YXJnZXQgY2hhcmFjdGVycyBpbiB0aGlzIHN0dWR54oCUYnV0IHdpdGggYWdlLCBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIGZvciBib3RoIGNoYXJhY3RlcnMgZ2VuZXJhbGx5IGRlY3JlYXNlZC4KCkZpbmFsbHksIF9NSU5EXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCB0aGUgcm9ib3QgdGhhbiBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgdGhlIGJlZXRsZS4gSW4gYWRkaXRpb24gdG8gdGhlIHByZWRpY3RlZCBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBpbiB0aGUgQk9EWSBhbmQgSEVBUlQgZG9tYWlucywgY2hpbGRyZW4ncyBfTUlORF8gc2NvcmVzIGZvciBib3RoIGNoYXJhY3RlcnMgZ2VuZXJhbGx5IGluY3JlYXNlZCB3aXRoIGFnZS4KCiMjIERpc2N1c3Npb24KCkFkdWx0cyBpbiBTdHVkeSAyIGRpc3Rpbmd1aXNoZWQgc3Ryb25nbHkgYmV0d2VlbiB0aGUgYW5pbWF0ZSBjaGFyYWN0ZXIgKHRoZSBiZWV0bGUpIHZzLiB0aGUgaW5hbmltYXRlIGNoYXJhY3RlciAodGhlIHJvYm90KSBpbiB0ZXJtcyBvZiB0aGVpciBjYXBhY2l0aWVzIGluIHRoZSBCT0RZIGRvbWFpbi4gVGhleSBncmFudGVkIGJvdGggb2YgdGhlc2UgImVkZ2UgY2FzZXMiIHJlbGF0aXZlbHkgbGltaXRlZCBhYmlsaXRpZXMgaW4gdGhlIEhFQVJUIGRvbWFpbiwgYW5kIHJlbGF0aXZlbHkgc3Ryb25nIGFiaWxpdGllcyBpbiB0aGUgTUlORCBkb21haW4gKHdpdGggdGhlIHJvYm90IGFjdHVhbGx5IGV4Y2VlZGluZyB0aGUgYmVldGxlIGluIGl0cyBwZXJjZWl2ZWQgTUlORCBhYmlsaXRpZXMpLgoKTGlrZSBhZHVsdHMsIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gY2xlYXJseSByZXNwZWN0ZWQgdGhlIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGluIHRoZWlyIGF0dHJpYnV0aW9ucyBvZiBCT0RZIGFiaWxpdGllcy4gRXZlbiBhbW9uZyB0aGVzZSByZWxhdGl2ZWx5ICJvbGQiIGNoaWxkcmVuLCBob3dldmVyLCB0aGVyZSB3YXMgcm9vbSBmb3IgaW5jcmVhc2luZyAiYWR1bHQtbGlrZS1uZXNzIiBhY3Jvc3MgdGhlIGFnZSByYW5nZTogVGhpcyBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgb2YgYSBiZWV0bGUgdnMuIHJvYm90IGdyZXcgbGFyZ2VyIHdpdGggaW5jcmVhc2luZyBhZ2UsIGRyaXZlbiBieSBkZWNyZWFzZXMgaW4gX0JPRFlfIHNjb3JlcyBmb3IgdGhlIHJvYm90LiAKClRoZSBiaWdnZXN0IGRpZmZlcmVuY2UgYmV0d2VlbiBjaGlsZHJlbiBhbmQgYWR1bHRzIGluIFN0dWR5IDIgd2FzIGluIHRoZSBIRUFSVCBkb21haW4uIENoaWxkcmVuIGF0dHJpYnV0ZWQgZmFyIG1vcmUgSEVBUlQgYWJpbGl0aWVz4oCUdG8gYm90aCB0aGUgYmVldGxlIGFuZCB0aGUgcm9ib3TigJR0aGFuIGRpZCBhZHVsdHMsIGFuZCBhbHRob3VnaCB0aGlzIHRlbmRlbmN5IGRlY3JlYXNlZCBhY3Jvc3MgdGhlIGFnZSByYW5nZSwgaXQgZGlkIG5vdCBhcHBlYXIgdG8gcmVhY2ggYWR1bHQtbGlrZSBsZXZlbHMgZXZlbiBhbW9uZyB0aGUgb2xkZXN0IGNoaWxkcmVuIGluIHRoaXMgc2FtcGxlIChzZWUgRmlndXJlIDUuMiwgY2VudGVyIHBhbmVsKS4gCgpDaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBNSU5EIHRvIHRoZXNlIGVkZ2UgY2FzZXMgd2VyZSBnZW5lcmFsbHkgYWR1bHQtbGlrZSwgYW5kIGNoYW5nZWQgb25seSBzbGlnaHRseSBvdmVyIHRoZSBhZ2UgcmFuZ2UsIGluY3JlYXNpbmcgdG8gZnVsbHkgYWR1bHQtbGlrZSBsZXZlbHMuIExpa2UgYWR1bHRzLCBjaGlsZHJlbiBnZW5lcmFsbHkgYXR0cmlidXRlZCBtYW55IE1JTkQgc2NvcmVzIHRvIGJvdGggY2hhcmFjdGVycywgYW5kIHBhcnRpY3VsYXJseSB0byB0aGUgcm9ib3QuIAoKCiMgU3R1ZHkgMzogQ29uY2VwdHVhbCBjaGFuZ2Ugb3ZlciBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZCAoNC05eSkKClN0dWR5IDMgYnVpbGRzIG9uIHRoZSBpbnZlc3RpZ2F0aW9uIG9mIG1pZGRsZSBjaGlsZGhvb2QgKDctOXkpIGluaXRpYXRlZCBpbiBTdHVkeSAyIGFuZCBleHRlbmRzIHRoaXMgZXhwbG9yYXRpb24gb2YgY29uY2VwdHVhbCBjaGFuZ2UgaW50byBlYXJsaWVyIGNoaWxkaG9vZCAoNC02eSkuIEluIHRoaXMgY2hhcHRlciwgSSBhZ2FpbiBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBjaGFuZ2VzIGluIHRoZSBkZXBsb3ltZW50IG9mIHRoaXMgY29uY2VwdOKAlGkuZS4sIHRoZSBhdHRyaWJ1dGlvbiBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgdG8gdmFyaW91cyBiZWluZ3MgaW4gdGhlIHdvcmxk4oCUb3ZlciB0aGUgY291cnNlIG9mIGVhcmx5IGFuZCBtaWRkbGUgY2hpbGRob29kICg3LTl5KS4KClRvIHJldmlldywgaW4gU3R1ZHkgMywgYHIgbnJvdyhkM19hZF93aWRlKWAgVVMgYWR1bHRzLCBgciBucm93KGQzXzc5X3dpZGUpYCAib2xkZXIiIGNoaWxkcmVuIChgciBzdW1tYXJ5KGQzXzc5JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkM183OSRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzOyBtZWRpYW46IGByIHN1bW1hcnkoZDNfNzkkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSksIGFuZCBgciBucm93KGQzXzQ2X3dpZGUpYCAieW91bmdlciIgY2hpbGRyZW4gKGByIHN1bW1hcnkoZDNfNDYkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYC1gciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAgeWVhcnM7IG1lZGlhbjogYHIgc3VtbWFyeShkM180NiRhZ2UpWyJNZWRpYW4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWB5KSBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgb24gMjAgbWVudGFsIGNhcGFjaXRpZXMuIFRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJkaXZlcnNlIGNoYXJhY3RlcnMiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIHJhbmRvbWx5IG9yIHBzZXVkby1yYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3Mgb25lIG9mIHRoZSBmb2xsb3dpbmcgOSBjaGFyYWN0ZXJzOiBhbiBlbGVwaGFudCwgYSBnb2F0LCBhIG1vdXNlLCBhIGJpcmQsIGEgYmVldGxlLCBhIHRlZGR5IGJlYXIsIGEgZG9sbCwgYSByb2JvdCwgb3IgYSBjb21wdXRlci4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKQXMgaW4gU3R1ZHkgMiwgdG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIGJldHdlZW4gdGhlIHRocmVlIGFnZSBncm91cHMgaW5jbHVkZWQgaW4gU3R1ZHkgMywgSSB1c2UgYWR1bHRzJyBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzIChhcyBkZXNjcmliZWQgaW4gQ2hhcHRlciBJVikgdG8gYW5hbHl6ZSBib3RoIGFnZSBncm91cHMuCgojIyBSZXN1bHRzCgpgYGB7cn0KZDNfNDY3OWFkX3Njb3JlZF9hZCA8LSBmdWxsX2pvaW4oZDNfYWRfc2NvcmVkX2FkLCBkM183OV9zY29yZWRfYWQpICU+JQogIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWQpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDNfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwKSkKCmNvbnRyYXN0cyhkM180Njc5YWRfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9kdjA5CmNvbnRyYXN0cyhkM180Njc5YWRfc2NvcmVkX2FkJGZhY3RvcikgPC0gY29udHJhc3RzX2NudDNfZmFjdG9yCmNvbnRyYXN0cyhkM180Njc5YWRfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRhZ2VfZ3JvdXApIDwtIGNvbnRyYXN0c19kdW0zX2FnZWdwCmBgYAoKIyMjIENoaWxkcmVuIHZzLiBhZHVsdHMKCmBgYHtyfQpkM180Njc5YWRfbWVhbnMgPC0gZDNfNDY3OWFkX3Njb3JlZF9hZCAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGFuaW1faW5hbiwgZmFjdG9yKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpCmBgYAoKU2VlIEZpZ3VyZSA1LjMsIHBhbmVsIEEsIGZvciBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NvcmVzIGZvciBlYWNoIG9mIHRoZSBuaW5lIHRhcmdldCBjaGFyYWN0ZXJzIGFtb25nIHRoZSB5b3VuZ2VyIGNoaWxkcmVuICg0LTZ5KSwgb2xkZXIgY2hpbGRyZW4gKDctOXkpLCBhbmQgYWR1bHRzIGluIFN0dWR5IDMsIGFuZCBGaWd1cmUgNS4zLCBwYW5lbCBCLCBmb3IgYSB2aXN1YWxpemF0aW9uIG9mIHNjb3JlcyB3aXRoIHRhcmdldCBjaGFyYWN0ZXJzIGdyb3VwZWQgaW50byBhbmltYXRlIGJlaW5ncyAoZWxlcGhhbnQsIGdvYXQsIG1vdXNlLCBiaXJkIGJlZXRsZSkgdnMuIGluYW5pbWF0ZSBvYmplY3RzICh0ZWRkeSBiZWFyLCBkb2xsLCByb2JvdCwgY29tcHV0ZXIpLiBUbyBmYWNpbGl0YXRlIGNvbXBhcmlzb24gd2l0aCBTdHVkaWVzIDIgYW5kIDQsIEkgd2lsbCBmb2N1cyBoZXJlIG9uIGFuaW1hY3kgc3RhdHVzLCByYXRoZXIgdGhhbiBhbmFseXppbmcgYWxsIHRhcmdldCBjaGFyYWN0ZXJzIGluZGl2aWR1YWxseS4KCkluIHRoZSBhZ2dyZWdhdGUsIGFsbCB0aHJlZSBhZ2UgZ3JvdXBzIHNlZW0gdG8gaGF2ZSBjb25zaWRlcmVkIHRoZSBhbmltYXRlIGJlaW5ncyBpbmNsdWRlZCBpbiB0aGlzIHN0dWR5IHRvIGhhdmUgYSByZWxhdGl2ZWx5IGhpZ2ggZGVncmVlIG9mIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyAobWVhbiBfQk9EWV8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJCT0RZIiwgImFkdWx0cyIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYDsgYW1vbmcgb2xkZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIkJPRFkiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYDsgYW1vbmcgeW91bmdlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiQk9EWSIsICJjaGlsZHJlbjQ2Iiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgKSwgYW5kIGEgbWlkZGxpbmcgZGVncmVlIG9mIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIChtZWFuIF9IRUFSVF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJIRUFSVCIsICJhZHVsdHMiLCB3aGljaF9hbmltID0gImFuaW1hdGUiKWA7IGFtb25nIG9sZGVyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJIRUFSVCIsICJjaGlsZHJlbjc5Iiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgOyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJIRUFSVCIsICJjaGlsZHJlbjQ2Iiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgKS4gQXNzZXNzbWVudHMgb2YgYW5pbWF0ZSBiZWluZ3MnIGFiaWxpdGllcyBpbiB0aGUgTUlORCBkb21haW4gYXBwZWFyIHRvIGhhdmUgdmFyaWVkIG1vcmUgYnkgYWdlIGdyb3VwOiBXaGlsZSBhZHVsdHMgdGVuZGVkIHRvIGdyYW50IGFuaW1hdGUgYmVpbmdzIGEgaGlnaCBkZWdyZWUgb2YgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIChtZWFuIF9NSU5EXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIk1JTkQiLCAiYWR1bHRzIiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgKSwgeW91bmdlciBjaGlsZHJlbidzIF9NSU5EXyBzY29yZXMgdGVuZGVkIHRvIGhvdmVyIGFyb3VuZCB0aGUgbWlkcG9pbnQgb2YgdGhlIHNjYWxlIChtZWFuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJNSU5EIiwgImNoaWxkcmVuNDYiLCB3aGljaF9hbmltID0gImFuaW1hdGUiKWApLCB3aXRoIG9sZGVyIGNoaWxkcmVuIGZhbGxpbmcgaW4gYmV0d2VlbiAobWVhbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjc5Iiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgKS4KCkZvciB0aGUgaW5hbmltYXRlIGJlaW5ncyBpbmNsdWRlZCBpbiB0aGlzIHN0dWR5LCB0aGVyZSB3YXMgYSBoaWdoIGRlZ3JlZSBvZiBjb25zZW5zdXMgYW1vbmcgYWR1bHRzIHRoYXQgc3VjaCBlbnRpdGllcyBoYWQgdmlydHVhbGx5IG5vIHBoeXNpb2xvZ2ljYWwgb3Igc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgKG1lYW4gX0JPRFlfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJCT0RZIiwgImFkdWx0cyIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgOyBtZWFuIF9IRUFSVF8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIkhFQVJUIiwgImFkdWx0cyIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgKS4gSW4gY29udHJhc3QsIGJvdGggZ3JvdXBzIG9mIGNoaWxkcmVuLCBpbiB0aGUgYWdncmVnYXRlLCBncmFudGVkIGxvdyB0byBtb2RlcmF0ZSBhYmlsaXRpZXMgdG8gaW5hbmltYXRlIGJlaW5ncyBpbiBib3RoIHRoZSBCT0RZIGRvbWFpbiAobWVhbiBfQk9EWV8gc2NvcmUgYW1vbmcgb2xkZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIkJPRFkiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgOyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNDYiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYCkgYW5kIHRoZSBIRUFSVCBkb21haW4gKG1lYW4gX0hFQVJUXyBzY29yZSBhbW9uZyBvbGRlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgOyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJIRUFSVCIsICJjaGlsZHJlbjQ2Iiwgd2hpY2hfYW5pbSA9ICJpbmFuaW1hdGUiKWApLiBBbGwgdGhyZWUgYWdlIGdyb3VwcywgaW4gdGhlIGFnZ3JlZ2F0ZSwgZ3JhbnRlZCBtaWRkbGluZyBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgdG8gdGhlc2UgaW5hbmltYXRlIGNoYXJhY3RlcnMgKHdoaWNoIGluY2x1ZGVkIHR3byAiaW50ZWxsaWdlbnQiIHRlY2hub2xvZ2llczsgbWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJNSU5EIiwgImFkdWx0cyIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgOyBhbW9uZyBvbGRlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjc5Iiwgd2hpY2hfYW5pbSA9ICJpbmFuaW1hdGUiKWA7IGFtb25nIHlvdW5nZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW40NiIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgKS4KCmBgYHtyfQpmaWd1cmU1LjNfcGxvdHMgPC0gY2hhcmFjdGVyX211bHRpcGxvdF9hZ2UoCiAgZGZfc2NvcmVkID0gZnVsbF9qb2luKGQzX2FkX3Njb3JlZF9hZCwgZDNfNDZfc2NvcmVkX2FkKSAlPiUKICAgIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWQpLCAKICBzaG93X2FuaW1fYnlfc3ViaiA9IFQsCiAgYWdlX2xldmVscyA9IGMoImNoaWxkcmVuNDYiLCAiY2hpbGRyZW43OSIsICJhZHVsdHMiKSwKICBhZ2VfbGFiZWxzID0gYygiQ2hpbGRyZW4sIDQtNnkiLCAiQ2hpbGRyZW4sIDctOXkiLCAiQWR1bHRzIiksCiAgaml0dGVyX3dpZCA9IDEuNSwKICBwbG90X21hcmdfdXBwZXIgPSAtNzAsIGF4aXNfaGVpZ2h0ID0gMC4xMSkKYGBgCgpgYGB7cn0KZmlndXJlNS4zX3Bsb3RzX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTUuM19wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSA1LjM6IEF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgeW91bmdlciBjaGlsZHJlbiAoNC02eSksIG9sZGVyIGNoaWxkcmVuICg3LTl5KSwgYW5kIGFkdWx0cyBpbiBTdHVkeSAzLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gUGxvdHMgaW5jbHVkZSAoQSkgc2NvcmVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIsIChCKSBhbmltYWN5IHN0YXR1cywgYW5kIChDKSBkaXN0cmlidXRpb25zIG9mIHNjb3Jlcy4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4iLCAyMzApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gMTAsIGZpZy5hc3AgPSAwLjR9CmdnZHJhdyhmaWd1cmU1LjNfcGxvdHNfY2FwKQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2Z3BfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiQk9EWSIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kM19kZXZncF9CT0RZLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9CT0RZIikKCnJfZDNfZGV2Z3BfQk9EWSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX0JPRFkiKQoKc3VtbWFyeShyX2QzX2RldmdwX0JPRFkpCmBgYAoKYGBge3J9CiMgcl9kM19kZXZncF9IRUFSVCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDNfZGV2Z3BfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX0hFQVJUIikKCnJfZDNfZGV2Z3BfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9IRUFSVCIpCgpzdW1tYXJ5KHJfZDNfZGV2Z3BfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM19kZXZncF9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkM180Njc5YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QzX2RldmdwX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX01JTkQiKQoKcl9kM19kZXZncF9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2Z3BfTUlORCIpCgpzdW1tYXJ5KHJfZDNfZGV2Z3BfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QzX2RldmdwIDwtIHJlZ3RhYl9kZXZncF9mdW4oCiAgcmVnX2JvZHkgPSByX2QzX2RldmdwX0JPRFksIAogIHJlZ19oZWFydCA9IHJfZDNfZGV2Z3BfSEVBUlQsCiAgcmVnX21pbmQgPSByX2QzX2RldmdwX01JTkQsCiAgYWdlX2xldmVscyA9IGMoImFnZV9ncm91cF9vbGQiLCAiYWdlX2dyb3VwX3luZyIpLCAKICBhZ2VfbGFiZWxzID0gYygiT2xkZXIgY2hpbGRyZW4gKDctOXkpIHZzLiBhZHVsdHMiLAogICAgICAgICAgICAgICAgICJZb3VuZ2VyIGNoaWxkcmVuICg0LTZ5KSB2cy4gYWR1bHRzIikpCmBgYAoKYGBge3J9CnRhYmxlNS4zIDwtIGRldmdwX3RhYmxlX2Z1bihyZWd0YWJfZGV2Z3AgPSByZWd0YWJfZDNfZGV2Z3AsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jaGFyYWN0ZXJzID0gOSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lID0gIlRhYmxlIDUuMyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZHlfbmFtZSA9ICJTdHVkeSAzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSAiNC0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2FnZV9ncm91cHMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJBbmltYXRlIGNoYXJhY3RlcnMgdnMuIEdNIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS4zCmBgYAoKQSBzZXJpZXMgb2YgQmF5ZXNpYW4gcmVncmVzc2lvbiBhbmFseXNlcyBjb25maXJtZWQgdGhlc2UgZ2VuZXJhbCBpbXByZXNzaW9ucyBvZiBkaWZmZXJlbmNlcyBhY3Jvc3MgYWdlIGdyb3VwcyAoc2VlIFRhYmxlIDUuMykuIAoKTmVpdGhlciBvbGRlciBub3IgeW91bmdlciBjaGlsZHJlbidzIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJywgYnV0IGluIGJvdGggZ3JvdXBzIG9mIGNoaWxkcmVuIHRoZSBkaWZmZXJlbmNlIGluIF9CT0RZXyBzY29yZXMgYmV0d2VlbiBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycyB3YXMgYXR0ZW51YXRlZCwgcmVsYXRpdmUgdG8gYWR1bHRzIChpLmUuLCBib3RoIGludGVyYWN0aW9uIHRlcm1zIHdlcmUgbm9uLXplcm8pLiBNZWFud2hpbGUsIGluIHRoZSBfSEVBUlRfIGRvbWFpbiwgYm90aCBvbGRlciBhbmQgeW91bmdlciBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIHdlcmUgZ2VuZXJhbGx5IGhpZ2hlciB0aGFuIGFkdWx0cycsIGJ1dCB0aGlzIGRpZmZlcmVuY2UgZGlkIG5vdCB2YXJ5IHN1YnN0YW50aWFsbHkgYWNyb3NzIHRhcmdldCBjaGFyYWN0ZXJzLiBGaW5hbGx5LCBpbiB0aGUgX01JTkRfIGRvbWFpbiwgeW91bmdlciBjaGlsZHJlbidzIChidXQgbm90IG9sZGVyIGNoaWxkcmVuJ3MpIF9NSU5EXyBzY29yZXMgd2VyZSBzdWJzdGFudGlhbGx5IGxvd2VyIHRoYW4gYWR1bHRzJy4gSW4gYWRkaXRpb24sIGluIGJvdGggZ3JvdXBzIG9mIGNoaWxkcmVuIHRoZSBkaWZmZXJlbmNlIGluIF9NSU5EXyBzY29yZXMgYmV0d2VlbiBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycyB3YXMgYXR0ZW51YXRlZCwgcmVsYXRpdmUgdG8gYWR1bHRzLgoKIyMjIEFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gNC05eQoKSGVyZSwgSSBzaGlmdCBmcm9tIHRoZSAic25hcHNob3QiIGFnZSBncm91cCBjb21wYXJpc29ucyBvZiB0aGUgcHJldmlvdXMgc2VjdGlvbiB0byBhbiBleGFtaW5hdGlvbiBvZiBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZTogSG93IG1pZ2h0IGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIHRvIHRoZXNlIHRhcmdldCBjaGFyYWN0ZXJzIGNoYW5nZSBiZXR3ZWVuIDQtOXkgb2YgYWdlPyAKCkFzIEkgYXJndWVkIGZvciBTdHVkeSAyLCBpZiB0aGUgYWdlIGdyb3VwIGRpZmZlcmVuY2VzIGp1c3QgZGVzY3JpYmVkIHJlZmxlY3QgX2RldmVsb3BtZW50YWxfIGRpZmZlcmVuY2VzLCBJIHdvdWxkIGV4cGVjdCB0aGF0LCB3aXRoIGluY3JlYXNpbmcgYWdlLCBjaGlsZHJlbidzIHJlc3BvbnNlcyB3b3VsZCBiZWNvbWUgaW5jcmVhc2luZ2x5IGFkdWx0LWxpa2UuIEluIHRoaXMgY2FzZSwgdGhpcyB3b3VsZCBtZWFuIHRoYXQgYWdlIHdvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBpbmNyZWFzZWQgZGlmZmVyZW50aWF0aW9uIG9mIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIGluIGNoaWxkcmVuJ3MgX0JPRFlfIHNjb3JlczsgbG93ZXIgX0hFQVJUXyBzY29yZXMgKHJlZ2FyZGxlc3Mgb2YgdGFyZ2V0IGNoYXJhY3Rlcik7IGFuZCBoaWdoZXIgX01JTkRfIHNjb3JlcywgcGFydGljdWxhcmx5IGZvciBhbmltYXRlIGJlaW5ncy4KCmBgYHtyfQpwbG90c19kM19kZXZfY2hhciA8LSBjaGFyYWN0ZXJfZGV2cGxvdCgKICBkZl9zY29yZWRfYWQgPSBkM19hZF9zY29yZWRfYWQsIAogIGRmX3Njb3JlZF9jaCA9IGZ1bGxfam9pbihkM183OV9zY29yZWRfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl83OSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZDNfNDZfc2NvcmVkX2FkICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSksIAogIGRmX2FnZSA9IGZ1bGxfam9pbihkM183OSAlPiUKICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgIGQzXzQ2ICU+JQogICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkpCmBgYAoKYGBge3J9CnBsb3RzX2QzX2Rldl9hbmltIDwtIGNoYXJhY3Rlcl9kZXZwbG90KAogIGRmX3Njb3JlZF9hZCA9IGQzX2FkX3Njb3JlZF9hZCAlPiUKICAgIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgICBtdXRhdGUoY2hhcmFjdGVyID0gYW5pbV9pbmFuKSwgCiAgZGZfc2NvcmVkX2NoID0gZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZCAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkM180Nl9zY29yZWRfYWQgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzQ2IikpKSAlPiUKICAgIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgICBtdXRhdGUoY2hhcmFjdGVyID0gYW5pbV9pbmFuKSwgCiAgZGZfYWdlID0gZnVsbF9qb2luKGQzXzc5ICU+JQogICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl83OSIpKSwKICAgICAgICAgICAgICAgICAgICAgZDNfNDYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzQ2IikpKSkKYGBgCgpgYGB7cn0KZmlndXJlNS40X2NoYXIgPC0gcGxvdHNfZDNfZGV2X2NoYXIgKwogIGxhYnModGl0bGUgPSAiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtOXkgKGJ5IHRhcmdldCBjaGFyYWN0ZXIpIikKCmZpZ3VyZTUuNF9hbmltIDwtIHBsb3RzX2QzX2Rldl9hbmltICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDM6IENoaWxkcmVuLCA0LTl5IChieSBhbmltYWN5IHN0YXR1cykiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKCJBbmltYWN5IHN0YXR1cyIsIHZhbHVlcyA9IGNvbG9yc0FJLAogICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZChkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxKSkpICsKICBzY2FsZV9maWxsX21hbnVhbCgiQW5pbWFjeSBzdGF0dXMiLCB2YWx1ZXMgPSBjb2xvcnNBSSwKICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZChkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEpKSkKCmZpZ3VyZTUuNF9wbG90cyA8LSBwbG90X2dyaWQoZmlndXJlNS40X2NoYXIsIGZpZ3VyZTUuNF9hbmltLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgbGFiZWxzID0gIkFVVE8iKQpgYGAKCmBgYHtyfQpmaWd1cmU1LjRfcGxvdHNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS40X3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDUuNDogQ2hhbmdlcyBpbiBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFtb25nIDQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMy4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIEluZGl2aWR1YWwgY2hpbGRyZW4gYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXM7IG1lYW4gc2NvcmVzIGFtb25nIGFkdWx0cyBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBMaW5lcyBjb3JyZXNwb25kIHRvIHNpbXBsZSBsaW5lYXIgcmVncmVzc2lvbnMgKGZvcm11bGE6IHNjb3JlIH4gYWdlKS4iLCAxMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDF9CmdnZHJhdyhmaWd1cmU1LjRfcGxvdHNfY2FwKQpgYGAKCmBgYHtyfQpkM180Njc5X3Njb3JlZF9hZCA8LSBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDNfNDZfc2NvcmVkX2FkICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNDYiKSkpICU+JQogIGxlZnRfam9pbihmdWxsX2pvaW4oZDNfNzkgJT4lIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl83OSIpKSwKICAgICAgICAgICAgICAgICAgICAgIGQzXzQ2ICU+JSBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNDYiKSkpICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDNfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfY2VudGVyZWQgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpCgpjb250cmFzdHMoZDNfNDY3OV9zY29yZWRfYWQkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2R2MDkKY29udHJhc3RzKGQzXzQ2Nzlfc2NvcmVkX2FkJGZhY3RvcikgPC0gY29udHJhc3RzX2NudDNfZmFjdG9yCmNvbnRyYXN0cyhkM180Njc5X3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KYGBgCgpgYGB7cn0KIyByX2QzX2RldnNjb3JlX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBjaGFyYWN0ZXIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2Nzlfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QzX2RldnNjb3JlX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldnNjb3JlX0JPRFkiKQoKcl9kM19kZXZzY29yZV9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfQk9EWSIpCgpzdW1tYXJ5KHJfZDNfZGV2c2NvcmVfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2QzX2RldnNjb3JlX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgY2hhcmFjdGVyKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkM180Njc5X3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDNfZGV2c2NvcmVfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldnNjb3JlX0hFQVJUIikKCnJfZDNfZGV2c2NvcmVfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZzY29yZV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDNfZGV2c2NvcmVfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM19kZXZzY29yZV9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgY2hhcmFjdGVyKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkM180Njc5X3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kM19kZXZzY29yZV9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZzY29yZV9NSU5EIikKCnJfZDNfZGV2c2NvcmVfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldnNjb3JlX01JTkQiKQoKc3VtbWFyeShyX2QzX2RldnNjb3JlX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kM19kZXZzY29yZSA8LSByZWd0YWJfZGV2c2NvcmVfZnVuKHJlZ19ib2R5ID0gcl9kM19kZXZzY29yZV9CT0RZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfaGVhcnQgPSByX2QzX2RldnNjb3JlX0hFQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfbWluZCA9IHJfZDNfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KdGFibGU1LjQgPC0gZGV2c2NvcmVfdGFibGVfZnVuKHJlZ3RhYl9kZXZzY29yZSA9IHJlZ3RhYl9kM19kZXZzY29yZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoYXJhY3RlcnMgPSA5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAiVGFibGUgNS40IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9uYW1lID0gIlN0dWR5IDMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9yYW5nZSA9ICI0LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oZDNfNDY3OV9zY29yZWRfYWQkYWdlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYS5ybSA9IFQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJBbmltYXRlIGNoYXJhY3RlcnMgdnMuIEdNIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS40CmBgYAoKU29tZSwgYnV0IG5vdCBhbGwsIG9mIHRoZXNlIHByZWRpY3Rpb25zIHdlcmUgYm9ybiBvdXQgYW1vbmcgdGhlIDQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gdGhpcyBzdHVkeSAoc2VlIFRhYmxlIDUuNCBhbmQgRmlndXJlIDUuNCkuIAoKQWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgaW4gdGhlIEJPRFkgZG9tYWluIGNvbmZvcm1lZCB0byB0aGUgZGV2ZWxvcG1lbnRhbCBzdG9yeSBzdWdnZXN0ZWQgYnkgdGhlIGdyb3VwIGRpZmZlcmVuY2VzIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uOiBfQk9EWV8gc2NvcmVzIHdlcmUgZ2VuZXJhbGx5IGhpZ2hlciBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgb25lIG9mIHRoZSBhbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIChlbGVwaGFudCwgZ29hdCwgbW91c2UsIGJpcmQsIG9yIGJlZXRsZSkgdGhhbiBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgb25lIG9mIHRoZSBpbmFuaW1hdGUgdGFyZ2V0IGNoYXJhY3RlcnMgKHRlZGR5IGJlYXIsIGRvbGwsIHJvYm90LCBvciBjb21wdXRlciksIGFuZCB0aGlzIGRpZmZlcmVuY2UgaW5jcmVhc2VkIHdpdGggYWdlIChpLmUuLCB0aGUgaW50ZXJhY3Rpb24gdGVybSB3YXMgbm9uLXplcm8pLiBWaXN1YWwgaW5zcGVjdGlvbiBvZiBGaWd1cmUgNS40LCBwYW5lbCBBLCBzdWdnZXN0cyB0aGF0IHRoZXNlIGdlbmVyYWwgdHJlbmRzIGhlbGQgdHJ1ZSBmb3IgYWxsIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycy4gQSByZWdyZXNzaW9uIGFuYWx5c2lzIGRpZCBub3QgcmV2ZWFsIGFueSByZWxpYWJsZSBvdmVyYWxsIGRpZmZlcmVuY2VzIChjb2xsYXBzaW5nIGFjcm9zcyBjaGFyYWN0ZXJzKSBpbiBfQk9EWV8gc2NvcmVzIG92ZXIgdGhlIGFnZSByYW5nZS4KClRoZSBncm91cCBkaWZmZXJlbmNlcyBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBzdWdnZXN0ZWQgdGhhdCBhdHRyaWJ1dGlvbnMgb2YgSEVBUlQgc2hvdWxkIGRlY3JlYXNlIHdpdGggYWdlLiBJIGRpZCBub3Qgb2JzZXJ2ZSBldmlkZW5jZSBvZiB0aGlzIHdpdGhpbiB0aGlzIHNhbXBsZSBvZiBjaGlsZHJlbi4gQXMgaW4gdGhlIEJPRFkgZG9tYWluLCBfSEVBUlRfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyB0aGFuIGFtb25nIHRob3NlIHdobyBhc3Nlc3NlZCBvbmUgb2YgdGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycywgYnV0IHRoZXJlIHdlcmUgbm8gcmVsaWFibGUgYWdlLXJlbGF0ZWQgY2hhbmdlcyBpbiBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzLiBWaXN1YWwgaW5zcGVjdGlvbiBvZiBGaWd1cmUgNS40LCBwYW5lbCBCLCBzdWdnZXN0cyB0aGF0IHRoaXMgbWF5IHJlZmxlY3QgdmFyaWFiaWxpdHkgYWNyb3NzIHNwZWNpZmljIHRhcmdldCBjaGFyYWN0ZXJzOiBGb3Igc29tZSBjaGFyYWN0ZXJzIChtb3N0IG5vdGFibHksIHRoZSByb2JvdCkgYXR0cmlidXRpb25zIG9mIEhFQVJUIGFwcGVhcmVkIHRvIGluY3JlYXNlIG92ZXIgdGhpcyBhZ2UgcmFuZ2UsIHdoaWxlIGZvciBvdGhlciBjaGFyYWN0ZXJzIChtb3N0IG5vdGFibHksIHRoZSBiZWV0bGUsIHRoZSBkb2xsLCBhbmQgdGhlIGNvbXB1dGVyKSBhdHRyaWJ1dGlvbnMgYXBwZWFyZWQgdG8gZGVjcmVhc2U7IGFuZCBmb3IgbWFueSBvZiB0aGUgdGFyZ2V0IGNoYXJhY3RlcnMgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeSB0aGVyZSBhcHBlYXJlZCB0byBiZSBubyBzeXN0ZW1hdGljIGFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGluIGF0dHJpYnV0aW9ucyBvZiBIRUFSVC4KCkZpbmFsbHksIGluIGxpbmUgd2l0aCB0aGUgZ3JvdXAgZGlmZmVyZW5jZXMgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIF9NSU5EXyBzY29yZXMgZ2VuZXJhbGx5IGluY3JlYXNlZCB3aXRoIGFnZS4gQXMgaW4gdGhlIEJPRFkgYW5kIE1JTkQgZG9tYWlucywgX01JTkRfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyB0aGFuIGFtb25nIHRob3NlIHdobyBhc3Nlc3NlZCBvbmUgb2YgdGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyc+KAlGJ1dCBhbHRob3VnaCBncm91cCBkaWZmZXJlbmNlcyBzdWdnZXN0ZWQgdGhhdCB0aGlzIGRpZmZlcmVuY2Ugc2hvdWxkIGluY3JlYXNlIHdpdGggYWdlLCB0aGVyZSB3YXMgbm8gZXZpZGVuY2UgZm9yIHRoaXMgaW50ZXJhY3Rpb24gYW1vbmcgY2hpbGRyZW4uIEhvd2V2ZXIsIHZpc3VhbCBpbnNwZWN0aW9uIG9mIEZpZ3VyZSA1LjQsIHBhbmVsIEMsIHN1Z2dlc3RzIHRoYXQgdGhlcmUgd2VyZSB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgZm9yIHdob20gYXR0cmlidXRpb25zIG9mIE1JTkQgZGlkIF9OT1RfIGluY3JlYXNlIHdpdGggYWdlOiBuYW1lbHksIHRoZSB0d28gaW5lcnQgdG95cyAodGhlIHRlZGR5IGJlYXIgYW5kIHRoZSBkb2xsKS4gSW50ZXJlc3RpbmdseSwgdGhpcyBwbG90IHN1Z2dlc3RzIHRoYXQgdGhlIHR3byB0ZWNobm9sb2dpZXMgKHRoZSByb2JvdCBhbmQgdGhlIGNvbXB1dGVyKSBhcHBlYXIgdG8gYmUgYW1vbmcgdGhlIGNoYXJhY3RlcnMgZm9yIHdob20gYWdlLXJlbGF0ZWQgY2hhbmdlcyBpbiBhdHRyaWJ1dGlvbnMgb2YgTUlORCBtYXkgaGF2ZSBiZWVuIG1vc3QgZHJhbWF0aWPigJRidXQgdGhpcyBnZW5lcmFsIHRyZW5kIG9mIGluY3JlYXNpbmcgYXR0cmlidXRpb25zIG9mIE1JTkQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYXBwbGllZCB0byBhbGwgb2YgdGhlIGFuaW1hdGUgY2hhcmFjdGVycy4KCiMjIERpc2N1c3Npb24KCkFzIGluIFN0dWR5IDIsIGFkdWx0cyBpbiBTdHVkeSAzIGRpc3Rpbmd1aXNoZWQgdmVyeSBzdHJvbmdseSBiZXR3ZWVuIGFuaW1hdGUgYmVpbmdzICh0aGUgZWxlcGhhbnQsIGdvYXQsIG1vdXNlLCBiaXJkLCBhbmQgYmVldGxlKSB2cy4gaW5hbmltYXRlIG9iamVjdHMgKHRoZSB0ZWRkeSBiZWFyLCBkb2xsLCByb2JvdCwgYW5kIGNvbXB1dGVyKSBpbiB0ZXJtcyBvZiB0aGVpciBjYXBhY2l0aWVzIGluIHRoZSBCT0RZIGRvbWFpbjogVGhleSB3ZXJlIG5lYXJseSB1bmFuaW1vdXMgaW4gdGhlaXIgZGVuaWFsIG9mIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyB0byBpbmFuaW1hdGUgb2JqZWN0cywgd2hpbGUgYWxsIG9mIHRoZSBhbmltYXRlIGJlaW5ncyB3ZXJlIGdyYW50ZWQgYSBmYWlybHkgaGlnaCBkZWdyZWUgb2YgQk9EWSBhYmlsaXRpZXMgKG9uIGF2ZXJhZ2UpLiBMaWtld2lzZSwgaW4gdGhlIEhFQVJUIGRvbWFpbiwgYWR1bHRzIHdlcmUgbmVhcmx5IHVuYW5pbW91cyBpbiB0aGVpciBkZW5pYWwgb2Ygc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgdG8gaW5hbmltYXRlIG9iamVjdHMsIHdoaWxlIGFuaW1hdGUgYmVpbmdzIHdlcmUgcGVyY2VpdmVkIHRvIHZhcnkgaW4gdGhlaXIgSEVBUlQgYWJpbGl0aWVzLiBGaW5hbGx5LCBlY2hvaW5nIFN0dWR5IDEsIGFkdWx0cyBkaWQgbm90IG91dHJpZ2h0IGRlbnkgdGhlIHBvc3NpYmlsaXR5IHRoYXQgc29tZSBpbmFuaW1hdGUgb2JqZWN0cyBjb3VsZCBoYXZlIGEgZmFpciBkZWdyZWUgb2YgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVz4oCUYnV0IHRoZXkgZGlkIGdyYW50IHJlbGF0aXZlbHkgX21vcmVfIE1JTkQgYWJpbGl0aWVzIHRvIGFuaW1hdGUgYmVpbmdzLgoKU3R1ZHkgMyBhbGlnbmVkIHdpdGggU3R1ZHkgMiBpbiBwcm92aWRpbmcgZnVydGhlciBldmlkZW5jZSBmb3IgYSByb2J1c3QgZGlzdGluY3Rpb24gYmV0d2VlbiBhbmltYXRlcyB2cy4gaW5hbmltYXRlcyBpbiB0aGUgQk9EWSBkb21haW4gYW1vbmcgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiwgYW5kIGV4dGVuZGVkIHRoaXMgZGlzdGluY3Rpb24gYmFjayB0byB5b3VuZ2VyICg0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuKS4gQXMgaW4gU3R1ZHkgMiwgaG93ZXZlciwgdGhpcyBkaXN0aW5jdGlvbiBhcHBlYXJzIHRvIGhhdmUgaW5jcmVhc2VkIHdpdGggYWdlIHdpdGhpbiB0aGlzIHNhbXBsZSBvZiBjaGlsZHJlbuKAlGluIHRoaXMgY2FzZSwgZHJpdmVuIGJvdGggYnkgZGVjcmVhc2VzIGluIF9CT0RZXyBzY29yZXMgZm9yIGluYW5pbWF0ZSBvYmplY3RzIChhcyBpbiBTdHVkeSAyKSBhbmQgYnkgX2luY3JlYXNlc18gaW4gX0JPRFlfIHNjb3JlcyBmb3IgYW5pbWF0ZSBiZWluZ3MuIAoKQWdhaW4gZWNob2luZyBTdHVkeSAyLCB0aGUgYmlnZ2VzdCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMyB3ZXJlIGluIHRoZSBIRUFSVCBkb21haW4uIEluIHRoaXMgY2FzZSwgaXQgd2FzIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRvIGluYW5pbWF0ZSBvYmplY3Rz4oCUYW5kIGluIHBhcnRpY3VsYXIsIHRoZSByb2JvdOKAlHRoYXQgbWFya2VkIHRoZW0gYXMgZGlmZmVyZW50IGZyb20gYWR1bHRzIGluIHRoaXMgc3R1ZHkuIEludGVyZXN0aW5nbHksIHRoaXMgZGlmZmVyZW5jZSBiZXR3ZWVuICJzbmFwc2hvdHMiIG9mIG9sZGVyIGFuZCB5b3VuZ2VyIGNoaWxkcmVuIHZzLiBhZHVsdHMgd2FzIF9ub3RfIHJlZmxlY3RlZCBpbiBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBfd2l0aGluXyB0aGUgY2hpbGQgc2FtcGxlOiBJZiBhbnl0aGluZywgX0hFQVJUXyBzY29yZXMgYW1vbmcgdGhlIHJlbGF0aXZlbHkgc21hbGwgc2FtcGxlIG9mIGNoaWxkcmVuIChuID0gYHIgZDNfNDY3OV9zY29yZWRfYWQgJT4lIGZpbHRlcihjaGFyYWN0ZXIgPT0gInJvYm90IikgJT4lIGRpc3RpbmN0KHN1YmlkKSAlPiUgbnJvdygpYCkgd2hvIGFzc2Vzc2VkIHRoZSByb2JvdCBhcHBlYXJlZCB0byBoYXZlIF9pbmNyZWFzZWRfIHdpdGggYWdlIChzZWUgRmlndXJlIDUuNCwgcGFuZWwgQSwgY2VudGVyIHBsb3QpLiBUb2dldGhlciB3aXRoIHRoZSByZXN1bHRzIG9mIFN0dWR5IDIsIHRoaXMgcHJvdmlkZXMgc29tZSBpbnRyaWd1aW5nIGV2aWRlbmNlIHRoYXQgY2hpbGRyZW4gKGF0IGxlYXN0IGNoaWxkcmVuIGluIHRoZSBTYW4gRnJhbmNpc2NvIEJheSBBcmVhKSBtYXkgaGF2ZSBxdWFsaXRhdGl2ZWx5IGRpZmZlcmVudCBiZWxpZWZzIHRoYW4gYWR1bHRzIGFib3V0IHRoZSBwb3NzaWJpbGl0eSBvZiBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyBpbiByb2JvdHMsIHBlcmhhcHMgcmVmbGVjdGluZyBjb2hvcnQgZGlmZmVyZW5jZXMgYXMgd2VsbCBhcyBhbnkgZGV2ZWxvcG1lbnRhbCBjaGFuZ2VzLiAoSSByZXR1cm4gdGhpcyB0aGlzIHBvc3NpYmlsaXR5IGluIENoYXB0ZXIgVkkuKQoKRmluYWxseSwgaW4gY29udHJhc3QgdG8gU3R1ZHkgMiwgU3R1ZHkgMyBhbHNvIHN1Z2dlc3RlZCBzdWJzdGFudGlhbCBvbmdvaW5nIGRldmVsb3BtZW50IGluIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIE1JTkQsIGNoYXJhY3Rlcml6ZWQgYnkgZHJhbWF0aWMgaW5jcmVhc2VzIGluIF9NSU5EXyBzY29yZXMgd2l0aCBhZ2UuIExpa2UgYWR1bHRzIGluIHRoaXMgc3R1ZHkgKGFuZCBsaWtlIGFkdWx0cyBhbmQgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAyKSwgY2hpbGRyZW4gb2YgYWxsIGFnZXMgc2VlbWVkIHRvIGJlIHdpbGxpbmcgdG8gYXR0cmlidXRlIGEgZmFpciBkZWdyZWUgb2YgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIHRvIGluYW5pbWF0ZSBiZWluZ3MuIEFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIHdlcmUgZHJpdmVuIG5vdCBvbmx5IGJ5IGluY3JlYXNlcyBpbiB0aGVzZSBhdHRyaWJ1dGlvbnMgKHdoaWNoIHJ1biBjb3VudGVyLXR5cGljYWwgdG8gdGhlIGJyb2FkZXN0IG9yIGJsdW50ZXN0IHZlcnNpb24gb2YgYSBnZW5lcmFsICJhbmltYXRlLWluYW5pbWF0ZSIgZGlzdGluY3Rpb24pLCBidXQgYWxzbyBieSBpbmNyZWFzZXMgaW4gYXR0cmlidXRpb25zIG9mIE1JTkQgdG8gX2FuaW1hdGVfIGJlaW5ncyAoc2VlIEZpZ3VyZSA1LjQpLgoKCiMgU3R1ZHkgNDogQSBmb2N1cyBvbiBlYXJseSBjaGlsZGhvb2QgKDQtNXkpCgpfTm90ZTogQXQgdGhlIHRpbWUgb2YgdGhlIHN1Ym1pc3Npb24gb2YgdGhpcyBkaXNzZXJ0YXRpb24sIHRoZSBzYW1wbGUgb2YgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiBmb3IgU3R1ZHkgNCB3YXMgb25seSBwYXJ0aWFsbHkgY29tcGxldGUuIEFsbCByZXN1bHRzIHVzaW5nIHRoaXMgc2FtcGxlIHNob3VsZCB0aHVzIGJlIGNvbnNpZGVyZWQgcHJlbGltaW5hcnkgYW5kIG5vdCBjb25jbHVzaXZlLl8KClN0dWR5IDQgYnVpbGRzIG9uIFN0dWR5IDMgYnkgcHJvdmlkaW5nIGEgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiBvZiByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgaW4gdGhlIHByZXNjaG9vbCB5ZWFycyAoNC01eSkuIEluIHRoaXMgY2hhcHRlciwgSSBhZ2FpbiBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGF0IHRoZSBlYXJsaWVzdCBwb2ludCBpbiBkZXZlbG9wbWVudCB0aGF0IEkgaGF2ZSBleGFtaW5lZCBzbyBmYXIsIGFuZCBjb21wYXJlIHRoZSBkZXBsb3ltZW50IG9mIHRoaXMgY29uY2VwdCBhbW9uZyB5b3VuZyBjaGlsZHJlbiB2cy4gYWR1bHRzLiAKClRvIHJldmlldywgaW4gU3R1ZHkgNCwgYHIgbnJvdyhkNF9hZF93aWRlKS8yYCBVUyBhZHVsdHMgYW5kIGByIG5yb3coZDRfNDZfd2lkZSkvMmAgVVMgY2hpbGRyZW4gYmV0d2VlbiB0aGUgYWdlcyBvZiBgciBzdW1tYXJ5KGQ0XzQ2JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkNF80NiRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDRfNDYkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSkgZWFjaCBhc3Nlc3NlZCB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgb24gMTggbWVudGFsIGNhcGFjaXRpZXMsIHdpdGggYWxsIGFzcGVjdHMgb2YgdGhlIGV4cGVyaW1lbnRhbCBkZXNpZ24gdGFpbG9yZWQgdG8gYmUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgeW91bmdlc3QgYWdlIGdyb3VwLiBUaGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCB3aXRoIHBhcnRpY2lwYW50cyBhc3Nlc3NpbmcgYm90aCBhIGJlZXRsZSBvciBhIHJvYm90IGluIHNlcXVlbmNlICh3aXRoIG9yZGVyIGNvdW50ZXJiYWxhbmNlZCBhY3Jvc3MgcGFydGljaXBhbnRzKS4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKQXMgaW4gU3R1ZGllcyAyIGFuZCAzLCB0byBmYWNpbGl0YXRlIGNvbXBhcmlzb24gYmV0d2VlbiBjaGlsZHJlbiBhbmQgYWR1bHRzIGluIFN0dWR5IDQsIEkgdXNlIGFkdWx0cycgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjYWxlcyAoYXMgZGVzY3JpYmVkIGluIENoYXB0ZXIgSVYpIHRvIGFuYWx5emUgYm90aCBhZ2UgZ3JvdXBzLgoKIyMgUmVzdWx0cwoKYGBge3J9CmQ0XzQ2YWRfc2NvcmVkX2FkIDwtIGZ1bGxfam9pbihkNF9hZF9zY29yZWRfYWQsIGQ0XzQ2X3Njb3JlZF9hZCkgJT4lCiAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGxldmVscyhkNF9hZF9zY29yZWRfYWQkY2hhcmFjdGVyKSksCiAgICAgICAgIGFnZV9ncm91cCA9IGZhY3RvcihhZ2VfZ3JvdXApKQoKY29udHJhc3RzKGQ0XzQ2YWRfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9lZGdlCmNvbnRyYXN0cyhkNF80NmFkX3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDRfNDZhZF9zY29yZWRfYWQkYW5pbV9pbmFuKSA8LSBjb250cmFzdHNfc3VtMl9hbmltCmNvbnRyYXN0cyhkNF80NmFkX3Njb3JlZF9hZCRhZ2VfZ3JvdXApIDwtIGNvbnRyYXN0c19kdW0yX2FnZWdwCmBgYAoKIyMjIENoaWxkcmVuIHZzLiBhZHVsdHMKCmBgYHtyfQpkNF80NmFkX21lYW5zIDwtIGQ0XzQ2YWRfc2NvcmVkX2FkICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpTZWUgRmlndXJlIDUuNSwgcGFuZWwgQSwgZm9yIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY29yZXMgZm9yIGJvdGggdGFyZ2V0IGNoYXJhY3RlcnMgYW1vbmcgdGhlIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSA0LiBPbiB0aGUgd2hvbGUsIHBhcnRpY2lwYW50cycgYXNzZXNzbWVudHMgb2YgdGhlc2UgdHdvICJlZGdlIGNhc2VzIiBpbiBTdHVkeSA0IHdlcmUgc2ltaWxhciB0byB0aG9zZSBvZiBhZHVsdHMnIGFuZCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDIuCgpBcyBpbiBTdHVkeSAyLCBpbiB0aGUgYWdncmVnYXRlLCBib3RoIGNoaWxkcmVuIGFuZCBhZHVsdHMgc2VlbSB0byBoYXZlIGNvbnNpZGVyZWQgdGhlIGJlZXRsZSAodGhlIGFuaW1hdGUgY2hhcmFjdGVyKSB0byBiZSBhIGJlaW5nIHdpdGggYSBtb2RlcmF0ZWx5IGhpZ2ggZGVncmVlIG9mIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyAobWVhbiBfQk9EWV8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCAiYmVldGxlIilgOyBhbW9uZyBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkJPRFkiLCAiY2hpbGRyZW40NiIsICJiZWV0bGUiKWApIGFuZCBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBjYXBhY2l0aWVzIChtZWFuIF9NSU5EXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJNSU5EIiwgImFkdWx0cyIsICJiZWV0bGUiKWA7IGFtb25nIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjQ2IiwgImJlZXRsZSIpYCkuIEFkdWx0cyBncmFudGVkIHJlbGF0aXZlbHkgbGl0dGxlIGluIHRoZSB3YXkgb2Ygc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgdG8gdGhlIGJlZXRsZSAobWVhbiBfSEVBUlRfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkhFQVJUIiwgImFkdWx0cyIsICJiZWV0bGUiKWApLCBidXTigJRhcyB3aXRoIHRoZSBvbGRlciBjaGlsZHJlbiBpbiBTdHVkeSAy4oCUY2hpbGRyZW4ncyBfSEVBUlRfIHNjb3JlcyB0ZW5kZWQgdG8gaG92ZXIgYXJvdW5kIHRoZSBtaWRwb2ludCBvZiB0aGUgc2NhbGUgKG1lYW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJIRUFSVCIsICJjaGlsZHJlbjQ2IiwgImJlZXRsZSIpYCkuCgpGb3IgdGhlIHJvYm90ICh0aGUgaW5hbmltYXRlIGNoYXJhY3RlcikgYm90aCBhZHVsdHMgYW5kIGNoaWxkcmVuLCBpbiB0aGUgYWdncmVnYXRlLCBpbmRpY2F0ZWQgYSBtb2RlcmF0ZSBkZWdyZWUgb2YgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIChtZWFuIF9NSU5EXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJNSU5EIiwgImFkdWx0cyIsICJyb2JvdCIpYDsgYW1vbmcgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJNSU5EIiwgImNoaWxkcmVuNDYiLCAicm9ib3QiKWApLCBhbmQgYXBwZWFyZWQgdG8gYWdyZWUgdGhhdCB0aGUgcm9ib3QgaGFkIGxlc3MgaW4gdGhlIHdheSBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgYW5kIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYW4gdGhlIGJlZXRsZS4gSG93ZXZlciwgZWNob2luZyB0aGUgcmVzdWx0cyBvZiBTdHVkeSAyLCB0aGUgdHdvIGFnZSBncm91cHMgYXBwZWFyIHRvIGhhdmUgZGl2ZXJnZWQgaW4gdGhlaXIgYXNzZXNzbWVudHMgb2YgdGhlIGFic29sdXRlIGRlZ3JlZSBvZiBCT0RZIGFuZCBIRUFSVCB0aGF0IHRoZXkgd2VyZSB3aWxsaW5nIHRvIGdyYW50IHRoZSByb2JvdDogQWR1bHRzIGdyYW50ZWQgdmVyeSBsaXR0bGUgaW4gZWl0aGVyIGRvbWFpbiAobWVhbiBfQk9EWV8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJCT0RZIiwgImFkdWx0cyIsICJyb2JvdCIpYDsgbWVhbiBfSEVBUlRfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiSEVBUlQiLCAiYWR1bHRzIiwgInJvYm90IilgKSwgd2hpbGUgY2hpbGRyZW4gZ3JhbnRlZCBtaWRkbGluZyBhYmlsaXRpZXMgaW4gYm90aCBkb21haW5zIChtZWFuIF9CT0RZXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkJPRFkiLCAiY2hpbGRyZW40NiIsICJyb2JvdCIpYDsgbWVhbiBfSEVBUlRfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW40NiIsICJyb2JvdCIpYCkuCgpgYGB7cn0KZmlndXJlNS41X3Bsb3RzIDwtIGNoYXJhY3Rlcl9tdWx0aXBsb3RfYWdlKAogIGRmX3Njb3JlZCA9IGZ1bGxfam9pbihkNF9hZF9zY29yZWRfYWQsIGQ0XzQ2X3Njb3JlZF9hZCksIAogIHNob3dfYW5pbV9ieV9zdWJqID0gVCwKICBhZ2VfbGV2ZWxzID0gYygiY2hpbGRyZW40NiIsICJhZHVsdHMiKSwKICBhZ2VfbGFiZWxzID0gYygiQ2hpbGRyZW4sIDQtNXkiLCAiQWR1bHRzIiksCiAgcGxvdF9tYXJnX3VwcGVyID0gLTQ1LCBheGlzX2hlaWdodCA9IDAuMDkpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNV9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjVfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNS41OiBBdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFtb25nIGNoaWxkcmVuICg0LTV5KSBhbmQgYWR1bHRzIGluIFN0dWR5IDQuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBQbG90cyBpbmNsdWRlIChBKSBzY29yZXMgYnkgdGFyZ2V0IGNoYXJhY3RlciwgYW5kIChCKSBkaXN0cmlidXRpb25zIG9mIHNjb3Jlcy4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4iLCA5MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC44fQpnZ2RyYXcoZmlndXJlNS41X3Bsb3RzX2NhcCkKYGBgCgpgYGB7cn0KIyByX2Q0X2RldmdwX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2Q0X2RldmdwX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldmdwX0JPRFkiKQoKcl9kNF9kZXZncF9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2Z3BfQk9EWSIpCgpzdW1tYXJ5KHJfZDRfZGV2Z3BfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2Q0X2RldmdwX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkNF80NmFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDRfZGV2Z3BfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldmdwX0hFQVJUIikKCnJfZDRfZGV2Z3BfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9IRUFSVCIpCgpzdW1tYXJ5KHJfZDRfZGV2Z3BfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZncF9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkNF80NmFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kNF9kZXZncF9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9NSU5EIikKCnJfZDRfZGV2Z3BfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldmdwX01JTkQiKQoKc3VtbWFyeShyX2Q0X2RldmdwX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kNF9kZXZncCA8LSByZWd0YWJfZGV2Z3BfZnVuKAogIHJlZ19ib2R5ID0gcl9kNF9kZXZncF9CT0RZLCAKICByZWdfaGVhcnQgPSByX2Q0X2RldmdwX0hFQVJULAogIHJlZ19taW5kID0gcl9kNF9kZXZncF9NSU5ELAogIGFnZV9sZXZlbHMgPSBjKCJhZ2VfZ3JvdXBfY2hpbGQiKSwgCiAgYWdlX2xhYmVscyA9IGMoIkNoaWxkcmVuIHZzLiBhZHVsdHMiKSkKYGBgCgpgYGB7cn0KdGFibGU1LjUgPC0gZGV2Z3BfdGFibGVfZnVuKHJlZ3RhYl9kZXZncCA9IHJlZ3RhYl9kNF9kZXZncCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoYXJhY3RlcnMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAiVGFibGUgNS41IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9uYW1lID0gIlN0dWR5IDQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9ICI0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2FnZV9ncm91cHMgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkJlZXRsZSB2cy4gR00iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjUKYGBgCgpBIHNlcmllcyBvZiBCYXllc2lhbiByZWdyZXNzaW9uIGFuYWx5c2VzIGNvbmZpcm1lZCB0aGVzZSBvdmVyYWxsIGltcHJlc3Npb25zLCB5aWVsZGluZyByZW1hcmthYmx5IHNpbWlsYXIgcmVzdWx0cyB0byB0aGUgcGFyYWxsZWwgY29tcGFyaXNvbiBiZXR3ZWVuIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSAyIChzZWUgVGFibGUgNS41KS4gCgpBcyBpbiBTdHVkeSAyLCBjaGlsZHJlbidzIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJy4gVGhpcyBhcHBlYXJzIHRvIGhhdmUgYmVlbiBwYXJ0aWN1bGFybHkgdHJ1ZSBmb3IgdGhlIHJvYm90OyBhcyBhIHJlc3VsdCwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYmVldGxlIGFuZCB0aGUgcm9ib3Qgd2FzIGF0dGVudWF0ZWQgYW1vbmcgY2hpbGRyZW4sIHJlbGF0aXZlIHRvIGFkdWx0cyAoaS5lLiwgdGhlIGludGVyYWN0aW9uIHRlcm0gd2FzIG5vbi16ZXJvKS4gQWdhaW4sIGFzIGluIFN0dWR5IDIsIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgd2VyZSBhbHNvIGhpZ2hlciB0aGFuIGFkdWx0cycuIEluIFN0dWR5IDQsIHRoaXMgZGlmZmVyZW5jZSBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgd2FzIHNsaWdodGx5IG1vcmUgcHJvbm91bmNlZCBmb3IgdGhlIHJvYm90IHRoYW4gdGhlIGJlZXRsZS4gQW5kIHlldCBhZ2FpbiwgYXMgaW4gU3R1ZHkgMiwgdGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gdGhlaXIgX01JTkRfIHNjb3Jlcy4KCiMjIyBBZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIDQtNXkKCkhlcmUsIEkgZXhwbG9yZSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZTogSG93IG1pZ2h0IGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIGNoYW5nZSBvdmVyIHRoZSBhZ2UgcmFuZ2UgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeT8gVW5saWtlIFN0dWRpZXMgMi0zLCB3aGljaCBlYWNoIGluY2x1ZGVkIGEgcmVsYXRpdmVseSB3aWRlIGFnZSByYW5nZSAoNy05eSBpbiBTdHVkeSAyOyA0LTl5IGluIFN0dWR5IDMpLCB0aGUgYWdlIHJhbmdlIGluY2x1ZGVkIGluIFN0dWR5IDQgd2FzIHJlbGF0aXZlbHkgbmFycm93LCByZW5kZXJpbmcgaXQgbGVzcyBsaWtlbHkgdG8gb2JzZXJ2ZSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcy4gTm9uZXRoZWxlc3MsIGJhc2VkIG9uIHRoZSBhZ2UgZ3JvdXAgY29tcGFyaXNvbnMgZGlzY3Vzc2VkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9ucywgSSBleHBlY3RlZCB0aGF0IHRoZSBtb3N0IGxpa2VseSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB0byBlbWVyZ2Ugd291bGQgYmUgZm9yIGluY3JlYXNlcyBpbiBhZ2UgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGxvd2VyIF9CT0RZXyBzY29yZXMsIHBhcnRpY3VsYXJseSBmb3IgdGhlIHJvYm90OyBhbmQgd2l0aCBsb3dlciBfSEVBUlRfIHNjb3JlcyBmb3IgYm90aCB0YXJnZXQgY2hhcmFjdGVycy4KCmBgYHtyfQpwbG90c19kNF9kZXYgPC0gY2hhcmFjdGVyX2RldnBsb3QoZGZfc2NvcmVkX2FkID0gZDRfYWRfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmX3Njb3JlZF9jaCA9IGQ0XzQ2X3Njb3JlZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl9hZ2UgPSBkNF80NikKYGBgCgpgYGB7cn0KZmlndXJlNS42IDwtIHBsb3RzX2Q0X2RldiArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSA0OiBDaGlsZHJlbiwgNC01eSIpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNl9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjYsIHN0cl93cmFwKCJGaWd1cmUgNS42OiBDaGFuZ2VzIGluIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSA0LiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBjaGlsZHJlbiBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlczsgbWVhbiBzY29yZXMgYW1vbmcgYWR1bHRzIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gc2ltcGxlIGxpbmVhciByZWdyZXNzaW9ucyAoZm9ybXVsYTogc2NvcmUgfiBhZ2UpLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC41fQpnZ2RyYXcoZmlndXJlNS42X3Bsb3RzX2NhcCkKYGBgCgpgYGB7cn0KZDRfNDZhZ2Vfc2NvcmVkX2FkIDwtIGQ0XzQ2X3Njb3JlZF9hZCAlPiUKICBsZWZ0X2pvaW4oZDRfNDYgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDRfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfY2VudGVyZWQgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpCgpjb250cmFzdHMoZDRfNDZhZ2Vfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9lZGdlCmNvbnRyYXN0cyhkNF80NmFnZV9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQ0XzQ2YWdlX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KYGBgCgpgYGB7cn0KIyByX2Q0X2RldnNjb3JlX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsgKDEgfCBzdWJpZCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2Q0X2RldnNjb3JlX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX0JPRFkiKQoKcl9kNF9kZXZzY29yZV9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2c2NvcmVfQk9EWSIpCgpzdW1tYXJ5KHJfZDRfZGV2c2NvcmVfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2Q0X2RldnNjb3JlX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArICgxIHwgc3ViaWQpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDRfZGV2c2NvcmVfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX0hFQVJUIikKCnJfZDRfZGV2c2NvcmVfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZzY29yZV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDRfZGV2c2NvcmVfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZzY29yZV9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArICgxIHwgc3ViaWQpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kNF9kZXZzY29yZV9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZzY29yZV9NSU5EIikKCnJfZDRfZGV2c2NvcmVfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX01JTkQiKQoKc3VtbWFyeShyX2Q0X2RldnNjb3JlX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kNF9kZXZzY29yZSA8LSByZWd0YWJfZGV2c2NvcmVfZnVuKHJlZ19ib2R5ID0gcl9kNF9kZXZzY29yZV9CT0RZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfaGVhcnQgPSByX2Q0X2RldnNjb3JlX0hFQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfbWluZCA9IHJfZDRfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KdGFibGU1LjYgPC0gZGV2c2NvcmVfdGFibGVfZnVuKHJlZ3RhYl9kZXZzY29yZSA9IHJlZ3RhYl9kNF9kZXZzY29yZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoYXJhY3RlcnMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAiVGFibGUgNS42IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9uYW1lID0gIlN0dWR5IDQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9yYW5nZSA9ICI0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oZDRfNDYkYWdlLCBuYS5ybSA9IFQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJCZWV0bGUgdnMuIEdNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmVmX3N1YmlkID0gVCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS42CmBgYAoKSG93ZXZlciwgbmVpdGhlciBvZiB0aGVzZSBkaWZmZXJlbmNlcyB3YXMgcHJlc2VudCBpbiB0aGlzIHNhbXBsZSBvZiBjaGlsZHJlbi4gSW5zdGVhZCwgdGhlIG9ubHkgcmVsaWFibGUgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZSB0byBlbWVyZ2Ugd2FzIGFuIGluY3JlYXNpbmcgZGlmZmVyZW50aWF0aW9uIG9mIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCBpbiB0aGUgQk9EWSBkb21haW4sIGRyaXZlbuKAlHN1cnByaXNpbmdseeKAlGJ5IGFuIF9pbmNyZWFzZV8gaW4gX0JPRFlfIHNjb3JlcyBmb3IgdGhlIGJlZXRsZSAocmF0aGVyIHRoYW4gYSBkZWNyZWFzZSBpbiBfQk9EWV8gc2NvcmVzIGZvciB0aGUgcm9ib3QpLiBTZWUgRmlndXJlIDUuNiwgYW5kIHNlZSBUYWJsZSA1LjYgZm9yIHRoZSBmdWxsIHJlc3VsdHMgb2YgdGhlc2UgcmVncmVzc2lvbiBhbmFseXNlcy4gCgojIyBEaXNjdXNzaW9uCgpBZHVsdHMnIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgdG8gdGhlIHR3byAiZWRnZSBjYXNlcyIgaW5jbHVkZWQgaW4gU3R1ZHkgNCB3ZXJlIHZlcnkgc2ltaWxhciB0byB0aGVpciBhdHRyaWJ1dGlvbnMgaW4gU3R1ZHkgMi4gQXMgaW4gcHJldmlvdXMgc3R1ZGllcywgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhbmltYXRlcyB2cy4gaW5hbmltYXRlcyB3YXMgZHJhbWF0aWMgaW4gdGhlIEJPRFkgZG9tYWluLCBzbWFsbGVyIGluIHRoZSBIRUFSVCBkb21haW4sIGFuZCBpbiB0aGlzIGNhc2Ugbm9uLWV4aXN0ZW50IGluIHRoZSBNSU5EIGRvbWFpbi4gCgpTdHVkeSA0IGFsaWduZWQgd2l0aCBTdHVkeSAzIGluIHByb3ZpZGluZyBldmlkZW5jZSBmb3IgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIGluIEJPRFkgYXR0cmlidXRpb25zIHdpdGhpbiB0aGUgeW91bmdlc3Qgc2FtcGxlIHRlc3RlZCBpbiB0aGVzZSBzdHVkaWVzICg0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuKS4gQXMgaW4gcHJldmlvdXMgc3R1ZGllcywgdGhpcyBkaXN0aW5jdGlvbiBhcHBlYXJzIHRvIGhhdmUgaW5jcmVhc2VkIHdpdGggYWdl4oCUYnV0IGluIGNvbnRyYXN0IHRvIHByZXZpb3VzIHN0dWRpZXMsIHRoaXMgYXBwZWFycyB0byBoYXZlIGJlZW4gZHJpdmVuIHByaW1hcmlseSBieSBpbmNyZWFzZXMgaW4gX0JPRFlfIHNjb3JlcyBmb3IgdGhlIGFuaW1hdGUgY2hhcmFjdGVyICh0aGUgYmVldGxlKS4gCgpMaWtlIGNoaWxkcmVuIGluIFN0dWRpZXMgMiBhbmQgMywgdGhlIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gaW4gdGhpcyBzdHVkeSBnZW5lcmFsbHkgYXR0cmlidXRlZCBncmVhdGVyIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIChIRUFSVCkgdG8gdGhlc2UgY2hhcmFjdGVycywgcmVsYXRpdmUgdG8gYWR1bHRzLiBGaW5hbGx5LCBsaWtlIHRoZSA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDIgKHdobyBhbHNvIGFzc2Vzc2VkIHRoZXNlICJlZGdlIGNhc2VzIiksIHRoZSA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIGRlbW9uc3RyYXRlZCByYXRoZXIgYWR1bHQtbGlrZSBhdHRyaWJ1dGlvbnMgaW4gdGhlIE1JTkQgZG9tYWluLiBUaGUgbGFjayBvZiBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZSBpbiB0aGUgZG9tYWlucyBvZiBIRUFSVCBhbmQgTUlORCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgd2l0aCBzb21lIGNhdXRpb24sIGdpdmVuIHRoZSBzbWFsbGVyIHNhbXBsZSBzaXplIGFuZCBtb3JlIGxpbWl0ZWQgYWdlIHJhbmdlIG9mIGNoaWxkcmVuIGluIFN0dWR5IDQgY29tcGFyZWQgdG8gU3R1ZGllcyAyIGFuZCAzLiAKCgojIEdlbmVyYWwgZGlzY3Vzc2lvbgoKYGBge3J9CnNjb3Jlc19hbGxfY2VudGVyZWRfbG9uZyA8LSBzY29yZXNfYWxsICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgbGVmdF9qb2luKHNjb3Jlc19hbGwgJT4lIAogICAgICAgICAgICAgIGRpc3RpbmN0KHN0dWR5LCBhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIpICU+JSAKICAgICAgICAgICAgICBjb3VudChzdHVkeSwgYWdlX2dyb3VwKSAlPiUKICAgICAgICAgICAgICByZW5hbWUobl9kYXRhcG9pbnRzID0gbikpICU+JQogIG11dGF0ZShzY29yZV9jZW50ZXJlZDAuNSA9IHNjb3JlIC0gMC41LAogICAgICAgICBkZXNpZ24gPSBjYXNlX3doZW4oCiAgICAgICAgICAgc3R1ZHkgJWluJSBjKCJTdHVkeSAxYSIsICJTdHVkeSAxYiIsICJTdHVkeSAyIikgfiAKICAgICAgICAgICAgICJlZGdlIGNhc2UgKGJldHdlZW4tU3MpIiwKICAgICAgICAgICBzdHVkeSAlaW4lIGMoIlN0dWR5IDFjIiwgIlN0dWR5IDQiKSB+IAogICAgICAgICAgICAgImVkZ2UgY2FzZSAod2l0aGluLVNzKSIsCiAgICAgICAgICAgc3R1ZHkgJWluJSBjKCJTdHVkeSAxZCIsICJTdHVkeSAzIikgfiAKICAgICAgICAgICAgICJkaXZlcnNlIGNoYXJhY3RlcnMgKGJldHdlZW4tU3MpIiksCiAgICAgICAgIGRlc2lnbiA9IGZhY3RvcihkZXNpZ24sIAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiZWRnZSBjYXNlIChiZXR3ZWVuLVNzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlZGdlIGNhc2UgKHdpdGhpbi1TcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2ZXJzZSBjaGFyYWN0ZXJzIChiZXR3ZWVuLVNzKSIpKSkKCnNjb3Jlc19hbGxfY2VudGVyZWRfd2lkZSA8LSBzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmcgJT4lCiAgc2VsZWN0KC1zY29yZSkgJT4lCiAgc3ByZWFkKGZhY3Rvciwgc2NvcmVfY2VudGVyZWQwLjUpCgojIGNvbnRyYXN0cyhzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmckYWdlX2dyb3VwKQpjb250cmFzdHMoc2NvcmVzX2FsbF9jZW50ZXJlZF9sb25nJGZhY3RvcikgPC0gY29udHJhc3RzX2R1bTNfZmFjdG9yCmNvbnRyYXN0cyhzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmckYW5pbV9pbmFuKSA8LSBjb250cmFzdHNfc3VtMl9hbmltCgojIGNvbnRyYXN0cyhzY29yZXNfYWxsX2NlbnRlcmVkX3dpZGUkYWdlX2dyb3VwKQpjb250cmFzdHMoc2NvcmVzX2FsbF9jZW50ZXJlZF93aWRlJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpgYGAKCmBgYHtyfQpzY2F0dGVyX2tleSA8LSBzY29yZXNfYWxsICU+JQogIGRpc3RpbmN0KHN0dWR5LCBhZ2VfZ3JvdXAsIGNoYXJhY3RlcikgJT4lCiAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICBjb3VudChzdHVkeSwgYWdlX2dyb3VwLCBhbmltX2luYW4pICU+JQogIG11dGF0ZShjaGFyYWN0ZXJfbGlzdCA9IGNhc2Vfd2hlbigKICAgIGFuaW1faW5hbiA9PSAiYW5pbWF0ZSIgJiBuID09IDEgfiAiYmVldGxlIiwKICAgIGFuaW1faW5hbiA9PSAiaW5hbmltYXRlIiAmIG4gPT0gMSB+ICJyb2JvdCIsCiAgICBuID4gMSB+IHBhc3RlMCgidmFyaW91cyAobj0iLCBuLCAiKSIpKSkKYGBgCgpgYGB7cn0Kc2NvcmVfYWxsX21iIDwtIHNjb3Jlc19hbGwgJT4lCiAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICBncm91cF9ieShzdHVkeSwgYWdlX2dyb3VwLCBhbmltX2luYW4sIGZhY3RvcikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnYXRoZXIoa2V5LCB2YWx1ZSwgYyhjaV9sb3dlciwgY2lfdXBwZXIsIG1lYW4pKSAlPiUKICB1bml0ZShmYWN0b3Jfa2V5LCBjKGZhY3Rvciwga2V5KSkgJT4lCiAgc3ByZWFkKGZhY3Rvcl9rZXksIHZhbHVlKSAlPiUKICByZW5hbWVfYWxsKGZ1bnMoZ3N1YigiX21lYW4iLCAiIiwgLikpKQpgYGAKCkluIHRoaXMgY2hhcHRlciwgSSBmb2N1c2VkIG9uIGEgdGhpcmQgYXNwZWN0IG9mIHRoZSBkZXZlbG9wbWVudCBvZiBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZTogdGhlIGRlcGxveW1lbnQgb2YgdGhlc2UgcmVwcmVzZW50YXRpb25zIGluIGFzc2Vzc21lbnRzIG9mIHBhcnRpY3VsYXIgYmVpbmdzIGluIHRoZSB3b3JsZC4gSSBmb2N1c2VkIGluIHBhcnRpY3VsYXIgb24gIGFuYWx5c2VzIHRoYXQgbWlnaHQgYnJpbmcgdG8gbGlnaHQgaG93IHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBpbnRlcmFjdCB3aXRoIGRpc3RpbmN0aW9ucyBiZXR3ZWVuIGFuaW1hdGUgYmVpbmdzIHZzLiBpbmFuaW1hdGUgb2JqZWN0cy4gCgojIyBBbiBhZHVsdCBlbmRwb2ludAoKVGFrZW4gdG9nZXRoZXIsIHRoZXNlIHN0dWRpZXMgc2hlZCBuZXcgbGlnaHQgb24gdGhlIHJvbGUgb2YgYXR0cmlidXRpb25zIG9mIG1lbnRhbCBsaWZlIGluIGFkdWx0cycgZGlzdGluY3Rpb24gYmV0d2VlbiBhbmltYXRlIGJlaW5ncyBhbmQgaW5hbmltYXRlIG9iamVjdHMuIFRoZXNlIGZpbmRpbmdzIGFyZSBwZXJoYXBzIGVhc2llc3QgdG8gdW5kZXJzdGFuZCBpbiB0ZXJtcyBvZiB0aGUgdmlzdWFsaXphdGlvbnMgb2YgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjb3JlcyBmb3IgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgcHJlc2VudGVkIGluIEZpZ3VyZXMgNS44IGFuZCA1LjkuIAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjZ9CmZpZ3VyZTUuN19wbG90IDwtIGdncGxvdChzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmcsCiAgICAgICBhZXMoeCA9IHN0dWR5LCB5ID0gc2NvcmUsIGdyb3VwID0gYW5pbV9pbmFuLCBjb2xvciA9IGFuaW1faW5hbiwKICAgICAgICAgICBzaGFwZSA9IGRlc2lnbikpICsKICBmYWNldF9ncmlkKGZhY3RvciB+IGFnZV9ncm91cCwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjEsIHNoYXBlID0gImNpcmNsZSIsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGppdHRlci53aWR0aCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZGdlLndpZHRoID0gMC43NSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KGRlc2lnbiwgc3R1ZHksIGFnZV9ncm91cCwgZmFjdG9yLCBhbmltX2luYW4pICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAzLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43NSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoIkFuaW1hY3kgc3RhdHVzIiwgdmFsdWVzID0gY29sb3JzQUksCiAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxKSkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwoIlZhcmlhbnQgb2YgZXhwZXJpbWVudGFsIGFwcHJvYWNoIiwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygxNiwgMTUsIDE3KSwKICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEpKSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBsZWdlbmQuZGlyZWN0aW9uID0gInZlcnRpY2FsIikgKwogIGxhYnMoeCA9ICJTdHVkeSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyfQpmaWd1cmU1LjdfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS43X3Bsb3QsIHN0cl93cmFwKCJGaWd1cmUgNS43OiBEaWZmZXJlbnRpYXRpb24gb2YgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgaW4gcGFydGljaXBhbnRzJyBlbmRvcnNlbWVudHMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFjcm9zcyBzdHVkaWVzIGFuZCBhZ2UgZ3JvdXBzLCB1c2luZyBhZHVsdHMnIEJPRFksIEhFQVJULCBhbmQgTUlORCBzY2FsZXMgZm9yIGFsbCBzYW1wbGVzLiBJbiBTdHVkaWVzIDFhLCAxYiwgYW5kIDIsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgZWl0aGVyIGFuIGFuaW1hdGUgJ2VkZ2UgY2FzZScgKGEgYmVldGxlKSBvciBhbiBpbmFuaW1hdGUgZWRnZSBjYXNlIChhIHJvYm90KS4gSW4gU3R1ZHkgMWMgYW5kIFN0dWR5IDQsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgYm90aCBhbiBhbmltYXRlIGFuZCBhbiBpbmFuaW1hdGUgJ2VkZ2UgY2FzZScgKGEgYmVldGxlIGFuZCBhIHJvYm90KS4gSW4gU3R1ZHkgMWQsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgZWl0aGVyIG9uZSBvZiAxNyBhbmltYXRlIGJlaW5ncyAoYWR1bHQsIGNoaWxkLCBpbmZhbnQsIHBlcnNvbiBpbiBhIHBlcnNpc3RlbnQgdmVnZXRhdGl2ZSBzdGF0ZSwgZmV0dXMsIGNoaW1wYW56ZWUsIGVsZXBoYW50LCBkb2xwaGluLCBiZWFyLCBkb2csIGdvYXQsIG1vdXNlLCBmcm9nLCBibHVlIGpheSwgZmlzaCwgYmVldGxlLCBvciBtaWNyb2JlKSBvciBvbmUgb2YgZm91ciBpbmFuaW1hdGUgb2JqZWN0cyAocm9ib3QsIGNvbXB1dGVyLCBjYXIsIHN0YXBsZXIpOyBzaW1pbGFybHksIGluIFN0dWR5IDMsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgZWl0aGVyIG9uZSBvZiBmaXZlIGFuaW1hdGUgY2hhcmFjdGVycyAoZWxlcGhhbnQsIGdvYXQsIG1vdXNlLCBiaXJkLCBvciBiZWV0bGUpIG9yIG9uZSBvZiBmb3VyIGluYW5pbWF0ZSBjaGFyYWN0ZXJzICh0ZWRkeSBiZWFyLCBkb2xsLCByb2JvdCwgb3IgY29tcHV0ZXIpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gc2NvcmVzIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgYmxhY2sgcG9pbnRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiIsIDgwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxLjN9CmdnZHJhdyhmaWd1cmU1LjdfY2FwKQpgYGAKCmBgYHtyfQojIHJfYW5pbSA8LSBicm0oc2NvcmVfY2VudGVyZWQwLjUgfiBmYWN0b3IgKiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAgKwojICAgICAgICAgICAgICAgICAoMSB8IHN0dWR5L3N1YmlkKSArICgxIHwgY2hhcmFjdGVyKSwKIyAgICAgICAgICAgICAgIGRhdGEgPSBzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmcgJT4lCiMgICAgICAgICAgICAgICAgIGZpbHRlcighZ3JlcGwoIlN0dWR5IDEiLCBzdHVkeSkpLAojICAgICAgICAgICAgICAgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSwKIyAgICAgICAgICAgICAgIGNvcmVzID0gZ2V0T3B0aW9uKCJtYy5jb3JlcyIsIDRMKSkKIyAKIyBzYXZlUkRTKHJfYW5pbSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfYW5pbSIpCgpyX2FuaW0gPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9hbmltIikKYGBgCgpgYGB7cn0KcmVndGFiX2FuaW0gPC0gZml4ZWYocl9hbmltKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbSIpICU+JQogIG11dGF0ZShDSTk1ID0gcGFzdGUwKCJbIiwgZm9ybWF0KHJvdW5kKFEyLjUsIDIpLCBuc21hbGwgPSAyKSwKICAgICAgICAgICAgICAgICAgICAgICAiLCAiLCBmb3JtYXQocm91bmQoUTk3LjUsIDIpLCBuc21hbGwgPSAyKSwgIl0iKSwKICAgICAgICAgbm9uemVybyA9IGlmZWxzZShRMi41ICogUTk3LjUgPj0gMCwgIioiLCAiIikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIHMuZS4gPSBFc3QuRXJyb3IpICU+JQogIG11dGF0ZShwYXJhbSA9IGZhY3RvcigKICAgIHBhcmFtLAogICAgbGV2ZWxzID0gYygKICAgICAgIyBCT0RZCiAgICAgICJJbnRlcmNlcHQiLCAKICAgICAgImFnZV9ncm91cF9vbGQiLCAKICAgICAgImFnZV9ncm91cF95bmciLCAKICAgICAgImFuaW1faW5hbl9hbmltX0dNIiwgIyBib2xkCiAgICAgICJhbmltX2luYW5fYW5pbV9HTTphZ2VfZ3JvdXBfb2xkIiwgIyBib2xkCiAgICAgICJhbmltX2luYW5fYW5pbV9HTTphZ2VfZ3JvdXBfeW5nIiwgIyBib2xkCiAgICAgICMgSEVBUlQKICAgICAgImZhY3Rvcl9oZWFydF9ib2R5IiwgCiAgICAgICJmYWN0b3JfaGVhcnRfYm9keTphZ2VfZ3JvdXBfb2xkIiwgCiAgICAgICJmYWN0b3JfaGVhcnRfYm9keTphZ2VfZ3JvdXBfeW5nIiwKICAgICAgImZhY3Rvcl9oZWFydF9ib2R5OmFuaW1faW5hbl9hbmltX0dNIiwgIyBib2xkCiAgICAgICJmYWN0b3JfaGVhcnRfYm9keTphbmltX2luYW5fYW5pbV9HTTphZ2VfZ3JvdXBfb2xkIiwgIyBib2xkCiAgICAgICJmYWN0b3JfaGVhcnRfYm9keTphbmltX2luYW5fYW5pbV9HTTphZ2VfZ3JvdXBfeW5nIiwgIyBib2xkCiAgICAgICMgTUlORAogICAgICAiZmFjdG9yX21pbmRfYm9keSIsCiAgICAgICJmYWN0b3JfbWluZF9ib2R5OmFnZV9ncm91cF9vbGQiLCAKICAgICAgImZhY3Rvcl9taW5kX2JvZHk6YWdlX2dyb3VwX3luZyIsCiAgICAgICJmYWN0b3JfbWluZF9ib2R5OmFuaW1faW5hbl9hbmltX0dNIiwgIyBib2xkCiAgICAgICJmYWN0b3JfbWluZF9ib2R5OmFuaW1faW5hbl9hbmltX0dNOmFnZV9ncm91cF9vbGQiLCAjIGJvbGQKICAgICAgImZhY3Rvcl9taW5kX2JvZHk6YW5pbV9pbmFuX2FuaW1fR006YWdlX2dyb3VwX3luZyIgIyBib2xkCiAgICApLAogICAgbGFiZWxzID0gYygKICAgICAgIyBCT0RZCiAgICAgICJCT0RZLCBhbW9uZyBhZHVsdHMgKGludGVyY2VwdCkiLAogICAgICAiQk9EWSwgb2xkZXIgY2hpbGRyZW4gKDctOXkpIHZzLiBhZHVsdHMgKG1haW4gZWZmZWN0KSIsIAogICAgICAiQk9EWSwgeW91bmdlciBjaGlsZHJlbiAoNC02eSkgdnMuIGFkdWx0cyAobWFpbiBlZmZlY3QpIiwKICAgICAgIkJPRFksIGFuaW1hdGVzIHZzLiBpbmFuaW1hdGVzLCBhbW9uZyBhZHVsdHMgKG1haW4gZWZmZWN0KSIsCiAgICAgICJCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgb2xkZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyAoMi13YXkgaW50ZXJhY3Rpb24pIiwKICAgICAgIkJPRFksIGFuaW1hdGVzIHZzLiBpbmFuaW1hdGVzLCB5b3VuZ2VyIGNoaWxkcmVuIHZzLiBhZHVsdHMgKDItd2F5IGludGVyYWN0aW9uKSIsCiAgICAgICMgSEVBUlQKICAgICAgIkhFQVJUIHZzLiBCT0RZLCBhbW9uZyBhZHVsdHMgKG1haW4gZWZmZWN0KSIsCiAgICAgICJIRUFSVCB2cy4gQk9EWSwgb2xkZXIgY2hpbGRyZW4gKDctOXkpIHZzLiBhZHVsdHMgKDItd2F5IGludGVyYWN0aW9uKSIsIAogICAgICAiSEVBUlQgdnMuIEJPRFksIHlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpIHZzLiBhZHVsdHMgKDItd2F5IGludGVyYWN0aW9uKSIsCiAgICAgICJIRUFSVCB2cy4gQk9EWSwgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMsIGFtb25nIGFkdWx0cyAoMi13YXkgaW50ZXJhY3Rpb24pIiwKICAgICAgIkhFQVJUIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgb2xkZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyAoMy13YXkgaW50ZXJhY3Rpb24pIiwKICAgICAgIkhFQVJUIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgeW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzICgzLXdheSBpbnRlcmFjdGlvbikiLAogICAgICAjIE1JTkQKICAgICAgIk1JTkQgdnMuIEJPRFksIGFtb25nIGFkdWx0cyAobWFpbiBlZmZlY3QpIiwKICAgICAgIk1JTkQgdnMuIEJPRFksIG9sZGVyIGNoaWxkcmVuICg3LTl5KSB2cy4gYWR1bHRzICgyLXdheSBpbnRlcmFjdGlvbikiLCAKICAgICAgIk1JTkQgdnMuIEJPRFksIHlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpIHZzLiBhZHVsdHMgKDItd2F5IGludGVyYWN0aW9uKSIsCiAgICAgICJNSU5EIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgYW1vbmcgYWR1bHRzICgyLXdheSBpbnRlcmFjdGlvbikiLAogICAgICAiTUlORCB2cy4gQk9EWSwgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMsIG9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMgKDMtd2F5IGludGVyYWN0aW9uKSIsCiAgICAgICJNSU5EIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgeW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzICgzLXdheSBpbnRlcmFjdGlvbikiCiAgICAgICkpKSAlPiUKICBzZWxlY3QocGFyYW0sIGIsIHMuZS4sIENJOTUsIG5vbnplcm8pICU+JQogIGFycmFuZ2UocGFyYW0pCmBgYAoKYGBge3J9CnRhYmxlNS43IDwtIHJlZ3RhYl9hbmltICU+JQogIHNlbGVjdCgtcy5lLikgJT4lCiAgcmVuYW1lKFBhcmFtZXRlciA9IHBhcmFtLCBgOTUlIENJYCA9IENJOTUsIGAgYCA9IG5vbnplcm8pICU+JQogIGthYmxlKGRpZ2l0cyA9IDIsCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSA1Ljc6IFJlZ3Jlc3Npb24gYW5hbHlzaXMgb2YgZGlzdGluY3Rpb25zIGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIGluIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgVVMgYWR1bHRzLCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuLCBhbmQgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkaWVzIDItNC4gSW4gdGVybXMgb2YgZml4ZWQgZWZmZWN0cywgdGhpcyBCYXllc2lhbiByZWdyZXNzaW9uIGluY2x1ZGVkIGFsbCBtYWluIGVmZmVjdHMgYW5kIGludGVyYWN0aW9ucyBiZXR3ZWVuIGZhY3RvciAoZHVtbXktY29kZWQgZm9yIGNvbXBhcmlzb25zIHRvIHRoZSBCT0RZIGRvbWFpbiBhcyBhIGJhc2VsaW5lKSwgYWdlIGdyb3VwIChkdW1teS1jb2RlZCBmb3IgY29tcGFyaXNvbnMgdG8gYWR1bHRzIGFzIGEgYmFzZWxpbmUpLCBhbmQgYW5pbWFjeSBzdGF0dXMgKGVmZmVjdC1jb2RlZCBmb3IgY29tcGFyaXNvbnMgb2YgYW5pbWF0ZSBjaGFyYWN0ZXJzIHRvIHRoZSBncmFuZCBtZWFuIGNvbGxhcHNpbmcgYWNyb3NzIGNoYXJhY3RlcnMpLiBUaGUgYW5pbWF0ZS1pbmFuaW1hdGUgY29tcGFyaXNvbnMgKGluY2x1ZGluZyBpbnRlcmFjdGlvbnMgd2l0aCBhZ2UgZ3JvdXApIGFyZSBoaWdobGlnaHRlZCBpbiBib2xkLCBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgcHJpbWFyeSBwYXJhbWV0ZXJzIG9mIGludGVyZXN0IGZvciB0aGVzZSBhbmFseXNlcy4gRm9yIGVhY2ggcGFyYW1ldGVyLCB0aGUgdGFibGUgaW5jbHVkZXMgdGhlIGVzdGltYXRlIChiKSBhbmQgYSA5NSUgY3JlZGlibGUgaW50ZXJ2YWwgZm9yIHRoYXQgZXN0aW1hdGUuIEFzdGVyaXNrcyBpbmRpY2F0ZSA5NSUgY3JlZGlibGUgaW50ZXJ2YWxzIHRoYXQgZG8gbm90IGluY2x1ZGUgMC4iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiQk9EWSIsIDEsIDYpICU+JQogIGdyb3VwX3Jvd3MoIkhFQVJUIiwgNywgMTIpICU+JQogIGdyb3VwX3Jvd3MoIk1JTkQiLCAxMywgMTgpICU+JQogIHJvd19zcGVjKGMoNDo2LCAxMDoxMiwgMTY6MTgpLCBib2xkID0gVCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS43CmBgYAoKRmlyc3QsIGluIHRoZSBhZ2dyZWdhdGUsIHRoZSBsYXJnZXN0IGFuZCBtb3N0IHJvYnVzdCBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbnMgYW1vbmcgYWR1bHRzIGluIHRoZXNlIHN0dWRpZXMgd2VyZSBpbiB0aGUgQk9EWSBkb21haW4sIGZvciB3aGljaCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIHNwYW5uZWQgYXQgbGVhc3QgaGFsZiBvZiB0aGUgMC0xIHNjYWxlIGFjcm9zcyBhbGwgb2YgdGhlIHN0dWRpZXMgaW5jbHVkZWQgaW4gdGhpcyBkaXNzZXJ0YXRpb24gKHNlZSBGaWd1cmUgNS43LCB0b3Agcm93KS4gQSByZWdyZXNzaW9uIGFuYWx5c2lzIGNvbmZpcm1lZCB0aGF0IGFkdWx0IHBhcnRpY2lwYW50cyBkaXN0aW5ndWlzaGVkIHN0cm9uZ2x5IGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgaW4gdGhlaXIgX0JPRFlfIHNjb3JlczsgY29sbGFwc2luZyBhY3Jvc3Mgc3R1ZGllcyB0aGlzIGRpc3RpbmN0aW9uIHdhcyBzdGlsbCBwcmVzZW50LCBidXQgc3Vic3RhbnRpYWxseSBkaW1pbmlzaGVkLCBpbiB0aGUgSEVBUlQgYW5kIE1JTkQgZG9tYWlucy4gVmlzdWFsIGluc3BlY3Rpb24gb2YgRmlndXJlIDUuNyAodG9wIHJvdykgc3VnZ2VzdHMgdGhhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuaW1hdGUgYW5kIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIGluIF9CT0RZXyBzY29yZXMgd2FzIHF1aXRlIGNvbnNpc3RlbnQgYWNyb3NzIHN0dWRpZXMsIHdoaWxlIGRpZmZlcmVuY2VzIGluIF9IRUFSVF8gYW5kIF9NSU5EXyBzY29yZXMgdmFyaWVkIHJhdGhlciBkcmFtYXRpY2FsbHkuIChTZWUgYWxzbyB0aGUgIlJvYm90IHZzLiBHTSIgYW5kICJBbmltYXRlIGNoYXJhY3RlcnMgdnMuIEdNIiByb3dzIGluIFRhYmxlcyA1LjEsIDUuMywgYW5kIDUuNSBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycyBhbW9uZyBhZHVsdHMgZWFjaCBzdHVkeSBzZXBhcmF0ZWx5LikKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC45fQpzY2F0dGVyXzQ2IDwtIHNjYXR0ZXJfcGxvdF9mdW4od2hpY2hfYWdlX2dyb3VwID0gIkNoaWxkcmVuLCA0LTZ5IikKc2NhdHRlcl83OSA8LSBzY2F0dGVyX3Bsb3RfZnVuKHdoaWNoX2FnZV9ncm91cCA9ICJDaGlsZHJlbiwgNy05eSIpCnNjYXR0ZXJfYWQgPC0gc2NhdHRlcl9wbG90X2Z1bih3aGljaF9hZ2VfZ3JvdXAgPSAiQWR1bHRzIikKYGBgCgpgYGB7cn0KZmlndXJlNS44X3Bsb3RzIDwtIHBsb3RfZ3JpZCgKICBwbG90X2dyaWQoc2NhdHRlcl80NiArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICBzY2F0dGVyXzc5ICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgZ2V0X2xlZ2VuZChzY2F0dGVyXzQ2ICsgCiAgICAgICAgICAgICAgIGd1aWRlcyhmaWxsID0gZ3VpZGVfY29sb3JiYXIoZGlyZWN0aW9uID0gInZlcnRpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJoZWlnaHQgPSAxNSwgYmFyd2lkdGggPSAwLjgpKSksCiAgICAgICAgICAgIG5jb2wgPSA0LCByZWxfd2lkdGhzID0gYygxLCAxLCAwLjMsIDAuNzUpLCBsYWJlbHMgPSBjKCJBIiwgIkIiLCAiIikpLAogIHBsb3RfZ3JpZChzY2F0dGVyX2FkICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgbGFiZWxzID0gIkMiKSwKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDEpKQpgYGAKCmBgYHtyfQpmaWd1cmU1LjhfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS44X3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDUuODogUGFydGljaXBhbnRzJyBlbmRvcnNlbWVudHMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGZvciBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycywgdXNpbmcgYWR1bHRzJyBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgc2NhbGVzIGZvciBhbGwgc2FtcGxlcy4gKEEpIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZGllcyAzIGFuZCA0LiAoQikgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkaWVzIDIgYW5kIDMuIChDKSBBZHVsdHMgaW4gU3R1ZGllcyAxLTQuIEluIFN0dWRpZXMgMWEsIDFiLCBhbmQgMiwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBlaXRoZXIgYW4gYW5pbWF0ZSAnZWRnZSBjYXNlJyAoYSBiZWV0bGUpIG9yIGFuIGluYW5pbWF0ZSBlZGdlIGNhc2UgKGEgcm9ib3QpLiBJbiBTdHVkeSAxYyBhbmQgU3R1ZHkgNCwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBib3RoIGFuIGFuaW1hdGUgYW5kIGFuIGluYW5pbWF0ZSAnZWRnZSBjYXNlJyAoYSBiZWV0bGUgYW5kIGEgcm9ib3QpLiBJbiBTdHVkeSAxZCwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBlaXRoZXIgb25lIG9mIDE3IGFuaW1hdGUgYmVpbmdzIChhZHVsdCwgY2hpbGQsIGluZmFudCwgcGVyc29uIGluIGEgcGVyc2lzdGVudCB2ZWdldGF0aXZlIHN0YXRlLCBmZXR1cywgY2hpbXBhbnplZSwgZWxlcGhhbnQsIGRvbHBoaW4sIGJlYXIsIGRvZywgZ29hdCwgbW91c2UsIGZyb2csIGJsdWUgamF5LCBmaXNoLCBiZWV0bGUsIG9yIG1pY3JvYmUpIG9yIG9uZSBvZiBmb3VyIGluYW5pbWF0ZSBvYmplY3RzIChyb2JvdCwgY29tcHV0ZXIsIGNhciwgc3RhcGxlcik7IHNpbWlsYXJseSwgaW4gU3R1ZHkgMywgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBlaXRoZXIgb25lIG9mIGZpdmUgYW5pbWF0ZSBjaGFyYWN0ZXJzIChlbGVwaGFudCwgZ29hdCwgbW91c2UsIGJpcmQsIG9yIGJlZXRsZSkgb3Igb25lIG9mIGZvdXIgaW5hbmltYXRlIGNoYXJhY3RlcnMgKHRlZGR5IGJlYXIsIGRvbGwsIHJvYm90LCBvciBjb21wdXRlcikuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4iLCAxNTUpLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuODV9CmdnZHJhdyhmaWd1cmU1LjhfY2FwKQpgYGAKCmBgYHtyfQpzY29yZXNfc3VtIDwtIHNjb3Jlc19hbGxfY2VudGVyZWRfd2lkZSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIHN0dWR5LCBhbmltX2luYW4pICU+JQogIHN1bW1hcmlzZShtZWFuX0IgPSBtZWFuKEJPRFkpLAogICAgICAgICAgICBtZWFuX0ggPSBtZWFuKEhFQVJUKSwKICAgICAgICAgICAgbWVhbl9NID0gbWVhbihNSU5EKSwKICAgICAgICAgICAgIyB2YXJfQiA9IHZhcihCT0RZKSwKICAgICAgICAgICAgIyB2YXJfSCA9IHZhcihIRUFSVCksCiAgICAgICAgICAgICMgdmFyX00gPSB2YXIoTUlORCksCiAgICAgICAgICAgIHNkX0IgPSBzZChCT0RZKSwKICAgICAgICAgICAgc2RfSCA9IHNkKEhFQVJUKSwKICAgICAgICAgICAgc2RfTSA9IHNkKE1JTkQpLAogICAgICAgICAgICByX0JIID0gY29yKEJPRFksIEhFQVJUKSwKICAgICAgICAgICAgcl9CTSA9IGNvcihCT0RZLCBNSU5EKSwKICAgICAgICAgICAgcl9ITSA9IGNvcihIRUFSVCwgTUlORCkpICU+JQogIGZpbHRlcighZ3JlcGwoIlN0dWR5IDEiLCBzdHVkeSkpICU+JQogIHNlbGVjdChzdHVkeSwgYW5pbV9pbmFuLCBhZ2VfZ3JvdXAsIAogICAgICAgICBlbmRzX3dpdGgoIl9CIiksIGVuZHNfd2l0aCgiX0giKSwgZW5kc193aXRoKCJfTSIpLAogICAgICAgICBzdGFydHNfd2l0aCgicl8iKSkgJT4lCiAgYXJyYW5nZShzdHVkeSwgYW5pbV9pbmFuLCBhZ2VfZ3JvdXApICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQp0YWJsZTUuOCA8LSBzY29yZXNfc3VtICU+JQogIHNlbGVjdCgtc3R1ZHkpICU+JQogIHJlbmFtZSgiQk9EWSB2cy4gSEVBUlQiID0gcl9CSCwgCiAgICAgICAgICJCT0RZIHZzLiBNSU5EIiA9IHJfQk0sIAogICAgICAgICAiSEVBUlQgdnMuIE1JTkQiID0gcl9ITSwKICAgICAgICAgIkFuaW1hY3kgc3RhdHVzIiA9IGFuaW1faW5hbiwgCiAgICAgICAgICJBZ2UgZ3JvdXAiID0gYWdlX2dyb3VwKSAlPiUKICByZW5hbWVfYXQodmFycyhzdGFydHNfd2l0aCgibWVhbl8iKSwgc3RhcnRzX3dpdGgoInNkXyIpKSwKICAgICAgICAgICAgZnVucyhnc3ViKCJfLiokIiwgIiIsIC4pKSkgJT4lCiAga2FibGUoZGlnaXRzID0gMiwKICAgICAgICBjYXB0aW9uID0gIlRhYmxlIDUuODogU3VtbWFyeSBzdGF0aXN0aWNzIGZvciBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgc2NvcmVzIGluIFN0dWRpZXMgMi00LCBvcmdhbml6ZWQgYnkgdGhlIGFnZSBncm91cCBvZiBwYXJ0aWNpcGFudHMgYW5kIHRoZSBhbmltYWN5IHN0YXR1cyBvZiB0YXJnZXQgY2hhcmFjdGVycy4iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgY29sdW1uX3NwZWMoc2VxKDMsIDksIDIpLCBib3JkZXJfbGVmdCA9IFQpICU+JQogIGNvbGxhcHNlX3Jvd3MoMSwgdmFsaWduID0gInRvcCIpICU+JQogIGdyb3VwX3Jvd3MoIlN0dWR5IDIiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSAzIiwgNSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIlN0dWR5IDQiLCAxMSwgMTQpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAyLCAiQk9EWSIgPSAyLCAiSEVBUlQiID0gMiwgIk1JTkQiID0gMiwKICAgICAgICAgICAgICAgICAgICAgIkNvcnJlbGF0aW9ucyAoUGVhcnNvbidzIHIpIiA9IDMpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjgKYGBgCgpCZXlvbmQgdGhpcywgdGhlcmUgYXBwZWFyIHRvIGJlIGhhdmUgYmVlbiBkaWZmZXJlbmNlcyBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIGluIHRoZSBfdmFyaWFiaWxpdHlfIG9mIGFkdWx0cycgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGF0dHJpYnV0aW9ucy4gSW4gZWFjaCBzdHVkeSwgYWR1bHRzJyBhdHRyaWJ1dGlvbnMgdG8gYW5pbWF0ZSBiZWluZ3MgdmFyaWVkIHdpZGVseSBhbG9uZyBhbGwgdGhyZWUgZGltZW5zaW9uczogQk9EWSwgSEVBUlQsIGFuZCBNSU5EIChzZWUgRmlndXJlIDUuNywgdG9wIHJvdzsgRmlndXJlIDUuOCwgcGFuZWwgQywgdG9wIHJvdzsgYW5kIFRhYmxlIDUuOCBmb3Igc3RhbmRhcmQgZGV2aWF0aW9ucyBhY3Jvc3Mgc3R1ZHksIGFuaW1hY3kgc3RhdHVzLCBhbmQgZG9tYWluKS4gVGhpcyB2YXJpYWJpbGl0eSBoYXMgc2V2ZXJhbCBwb3NzaWJsZSBzb3VyY2VzLCBpbmNsdWRpbmcgZGlmZmVyZW5jZXMgaW4gb3BpbmlvbnMgb3IgYmVsaWVmcyBhY3Jvc3MgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgKGVzcGVjaWFsbHkgcmVsZXZhbnQgZm9yIGF0dHJpYnV0aW9ucyB0byB0aGUgYW5pbWF0ZSAiZWRnZSBjYXNlIuKAlHRoZSBiZWV0bGXigJRpbiBTdHVkaWVzIDFhLCAxYiwgMWMsIDIsIGFuZCA0KSwgYXMgd2VsbCBhcyBkaWZmZXJlbmNlcyBpbiB0aGUgKHBlcmNlaXZlZCkgbWVudGFsIGNhcGFjaXR5IHByb2ZpbGVzIG9mIGRpZmZlcmVudCBhbmltYXRlIGJlaW5ncyAoZXNwZWNpYWxseSByZWxldmFudCBmb3IgYXR0cmlidXRpb25zIHRvIHRoZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiBmZWF0dXJlZCBpbiBTdHVkeSAxZCBhbmQgU3R1ZHkgMykuIAoKTW9yZW92ZXIsIHRoZXNlIGF0dHJpYnV0aW9ucyBhcHBlYXIgdG8gaGF2ZSB2YXJpZWQgaW4gdGFuZGVtIChzZWUgRmlndXJlIDUuOCBhbmQgVGFibGUgNS44KS4gX0JPRFlfIGFuZCBfTUlORF8gc2NvcmVzIGZvciBhbmltYXRlIGJlaW5ncyB3ZXJlIHBhcnRpY3VsYXJseSBzdHJvbmdseSBjb3JyZWxhdGVkIChQZWFyc29uJ3MgciA9IGByIHN0YXRfcmFuZ2VfcHJpbnRfZnVuKCJBZHVsdHMiLCAiYW5pbWF0ZSIsICJyX0JNIilgIGFjcm9zcyBTdHVkaWVzIDItNCksIGFuZCBzY29yZXMgZm9yIGVhY2ggb2YgdGhlc2UgbW9yZSAiYmFzaWMiIGNvbmNlcHR1YWwgdW5pdHMgKHBlciBDaGFwdGVyIElWKSB3ZXJlIGFsc28gY29ycmVsYXRlZCBxdWl0ZSBzdHJvbmdseSB3aXRoIF9IRUFSVF8gc2NvcmVzIChCT0RZIHZzLiBIRUFSVDogciA9IGByIHN0YXRfcmFuZ2VfcHJpbnRfZnVuKCJBZHVsdHMiLCAiYW5pbWF0ZSIsICJyX0JIIilgOyBNSU5EIHZzLiBIRUFSVDogciA9IGByIHN0YXRfcmFuZ2VfcHJpbnRfZnVuKCJBZHVsdHMiLCAiYW5pbWF0ZSIsICJyX0hNIilgKS4gSW5kZWVk4oCUdG8gcGljayB1cCBvbiBhIHRocmVhZCBmcm9tIHRoZSBHZW5lcmFsIERpc2N1c3Npb24gaW4gQ2hhcHRlciBJVuKAlGF0dHJpYnV0aW9ucyBvZiBIRUFSVCB0byBhbmltYXRlIGJlaW5ncyBhcHBlYXIgdG8gaGF2ZSBiZWVuIF9qb2ludGx5XyBkZXBlbmRlbnQgb24gYXR0cmlidXRpb25zIG9mIF9ib3RoXyBCT0RZIGFuZCBNSU5EOyBzZWUgRmlndXJlIDUuOCwgcGFuZWwgQywgaW4gd2hpY2ggc3Ryb25nIF9IRUFSVF8gc2NvcmVzIGFyZSBwcmVzZW50IG9ubHkgYW1vbmcgcGFydGljaXBhbnRzIHdobyByZWNlaXZlZCBzdHJvbmcgX0JPRFlfIGFuZCBfTUlORF8gc2NvcmVz4oCUaS5lLiwgcmVkZGlzaCBwb2ludHMgYXJlIG9ubHkgcHJlc2VudCBpbiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyIG9mIHRoZSBwbG90LiAKCk1lYW53aGlsZSwgYWR1bHRzJyBhdHRyaWJ1dGlvbnMgdG8gaW5hbmltYXRlIG9iamVjdHMgKEZpZ3VyZSA1LjgsIHBhbmVsIEMsIGJvdHRvbSByb3cpIHZhcmllZCBwYXJ0aWN1bGFybHkgc3Ryb25nbHkgaW4gdGhlIE1JTkQgZG9tYWluLCBidXQgc2VlbWluZ2x5IGxlc3MgaW4gdGhlIGRvbWFpbnMgb2YgQk9EWSBhbmQgSEVBUlQgKHNlZSBhbHNvIFRhYmxlIDUuOCkuIEFtb25nIGluYW5pbWF0ZSBvYmplY3RzLCBfQk9EWV8gYW5kIF9IRUFSVF8gc2NvcmVzIHdlcmUgcGFydGljdWxhcmx5IHN0cm9uZ2x5IGNvcnJlbGF0ZWQgKFBlYXJzb24ncyByID0gYHIgc3RhdF9yYW5nZV9wcmludF9mdW4oIkFkdWx0cyIsICJpbmFuaW1hdGUiLCAicl9CSCIpYCBhY3Jvc3MgU3R1ZGllcyAyLTQp4oCUYnV0IGhpZ2ggc2NvcmVzIGluIGVpdGhlciBvZiB0aGVzZSB0d28gZG9tYWlucyB3ZXJlIHF1aXRlIHJhcmUuIFNjb3JlcyBmb3IgdGhlIHR3byBtb3JlICJiYXNpYyIgY29uY2VwdHVhbCB1bml0cyAocGVyIENoYXB0ZXIgSVYpLCBfQk9EWV8gYW5kIF9NSU5EXywgd2VyZSBvbmx5IHdlYWtseSBjb3JyZWxhdGVkIChQZWFyc29uJ3MgciA9IGByIHN0YXRfcmFuZ2VfcHJpbnRfZnVuKCJBZHVsdHMiLCAiaW5hbmltYXRlIiwgInJfQk0iKWAgYWNyb3NzIFN0dWRpZXMgMi00KSwgYW5kIF9NSU5EXyBhbmQgX0hFQVJUXyBzY29yZXMgd2VyZSB2aXJ0dWFsbHkgaW5kZXBlbmRlbnQgKE1JTkQgdnMuIEhFQVJUOiByID0gYHIgc3RhdF9yYW5nZV9wcmludF9mdW4oIkFkdWx0cyIsICJpbmFuaW1hdGUiLCAicl9ITSIpYCkuIAoKSW4gc3VtLCB0aGVzZSBzdHVkaWVzIHN1Z2dlc3QgdGhhdOKAlGluIGFkZGl0aW9uIHRvIGJpb2xvZ2ljYWwgcHJvcGVydGllcyBsaWtlIGhhdmluZyBibG9vZCwgZGlnZXN0aW5nIGZvb2QsIGdyb3dpbmcsIHJlcHJvZHVjaW5nLCBhbmQgZHlpbmfigJRVUyBhZHVsdHMgZGlzdGluZ3Vpc2ggYW5pbWF0ZSBiZWluZ3MgZnJvbSBpbmFuaW1hdGUgb2JqZWN0cyBieSB0aGVpciBoaWdoIGRlZ3JlZSBvZiBwZXJjZWl2ZWQgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIChCT0RZKeKAlGFuZCwgdG8gYSBsZXNzZXIgZGVncmVlLCB0aGVpciBzdXBlcmlvciBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyAoSEVBUlQpIGFuZCBwZXJjZXB0dWFsIGNvZ25pdGl2ZSBhYmlsaXRpZXMgKE1JTkQpLiBBYm92ZSBhbmQgYmV5b25kIHBlcmNlaXZpbmcgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMgdG8gZGlmZmVyIGluIHRoZWlyICJhdmVyYWdlIiBtZW50YWwgY2FwYWNpdGllcywgYWR1bHRzIGluIHRoZXNlIHN0dWRpZXMgYWxzbyBhcHBlYXJlZCB0byBjb25jZXB0dWFsaXplIGFuaW1hdGUgYmVpbmdzIGFzIGVudGl0aWVzIHdobyBfdmFyeV8gcXVpdGUgZHJhbWF0aWNhbGx5IGluIGFsbCB0aHJlZSBhc3BlY3RzIG9mIG1lbnRhbCBsaWZlLCBhbmQgZm9yIHdob20gdGhlc2UgZGlmZmVyZW50IGFzcGVjdHMgb2YgbWVudGFsIGxpZmUgbWF5IGJlIGNsb3NlbHkgcmVsYXRlZC4gSW4gY29udHJhc3QsIGluIHRoaXMgY29uc2Vuc3VzIHZpZXcgaW5hbmltYXRlIG9iamVjdHMgYXBwZWFyIHRvIGJlIHNlZW4gYXMgZW50aXRpZXMgdGhhdCB2YXJ5IG1vc3RseSBpbiB0aGVpciBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgKE1JTkQpLCB3aXRoIGNvbnNpc3RlbnRseSBsaXR0bGUgb2YgdGhlIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyBvciBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyBvZiB0aGUgQk9EWSBhbmQgSEVBUlQuCgojIyBBIGRldmVsb3BtZW50YWwgdHJhamVjdG9yeQoKQXMgYW1vbmcgYWR1bHRzLCB0aGUgbGFyZ2VzdCBhbmQgbW9zdCByb2J1c3QgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb25zIGFtb25nIGNoaWxkcmVuIGluIHRoZXNlIHN0dWRpZXMgd2VyZSBhbHNvIGluIHRoZSBCT0RZIGRvbWFpbuKAlGJ1dCB0aGVzZSBkaXN0aW5jdGlvbnMgd2VyZSBub3QgcXVpdGUgYXMgZHJhbWF0aWMgYW1vbmcgY2hpbGRyZW4gYXMgdGhleSB3ZXJlIGFtb25nIGFkdWx0cyAoc2VlIEZpZ3VyZSA1LjcsIGNlbnRlciBhbmQgcmlnaHQgY29sdW1ucykuIFRoZSByZWdyZXNzaW9uIGFuYWx5c2lzIHJlcG9ydGVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uIGNvbmZpcm1lZCB0aGF0IHRoZSBkaWZmZXJlbmNlIGluIF9CT0RZXyBzY29yZXMgYmV0d2VlbiBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycyB3YXMgc21hbGxlciBib3RoIGFtb25nIG9sZGVyIGNoaWxkcmVuICg3LTl5KSBhbmQgcGFydGljdWxhcmx5IGFtb25nIHlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpIHRoYW4gaXQgd2FzIGFtb25nIGFkdWx0cyAoc2VlIFRhYmxlIDUuNykuIFRoaXMgYXBwZWFycyB0byBoYXZlIGJlZW4gZHJpdmVuIHByaW1hcmlseSBieSBjaGlsZHJlbiBvdmVyLWF0dHJpYnV0aW5nIEJPRFkgdG8gaW5hbmltYXRlIGNoYXJhY3RlcnM6IFdoaWxlIGFkdWx0cycgX0JPRFlfIHNjb3JlcyB3ZXJlIG5lYXIgemVybyBmb3IgaW5hbmltYXRlIGJlaW5ncywgY2hpbGRyZW4ncyBfQk9EWV8gc2NvcmVzIGZvciBpbmFuaW1hdGUgY2hhcmFjdGVycyBob3ZlcmVkLCBvbiBhdmVyYWdlLCBhcm91bmQgMC4yNSBvbiBhIHNjYWxlIGZyb20gMCB0byAxIChzZWUgRmlndXJlIDUuNykuCgpJbiBsaW5lIHdpdGggYW4gYXR0ZW51YXRlZCBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBpbiB0aGUgQk9EWSBkb21haW4sIHRoZSBkaWZmZXJlbmNlcyBpbiB0aGUgc3RyZW5ndGggb2YgdGhlIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGFjcm9zcyBkb21haW5zIHdlcmUgc3Vic3RhbnRpYWxseSBhdHRlbnVhdGVkLCBib3RoIGFtb25nIG9sZGVyIGNoaWxkcmVuIGFuZCBwYXJ0aWN1bGFybHkgYW1vbmcgeW91bmdlciBjaGlsZHJlbiwgYXMgY29tcGFyZWQgdG8gYWR1bHRzLgoKSW4gdGVybXMgb2YgdmFyaWFiaWxpdHksIGJvdGggb2xkZXIgYW5kIHlvdW5nZXIgY2hpbGRyZW4gYXBwZWFyLCBpZiBhbnl0aGluZywgdG8gaGF2ZSBkZW1vbnN0cmF0ZWQgdGhlIHJldmVyc2UgcGF0dGVybiB0byB0aGF0IG9mIGFkdWx0czogX0JPRFlfIHNjb3JlcyBhcHBlYXIgdG8gaGF2ZSBiZWVuIG1vcmUgdmFyaWFibGUgZm9yIF9pbmFuaW1hdGVfIHRoYW4gYW5pbWF0ZSBjaGFyYWN0ZXJzLCBhbmQgX0hFQVJUXyBhbmQgX01JTkRfIHNjb3JlcyBhcHBlYXIgdG8gaGF2ZSBiZWVuIHJvdWdobHkgZXF1YWxseSB2YXJpYWJsZSBmb3IgYW5pbWF0ZSBhbmQgaW5hbmltYXRlIGNoYXJhY3RlcnMgYW1vbmcgY2hpbGRyZW4uIE1vcmVvdmVyLCBjb3ZhcmlhbmNlIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlc2UgdGhyZWUgYXNwZWN0cyBvZiBtZW50YWwgbGlmZSBhcHBlYXJlZCB0byBiZSBubyBjbGVhcmVyIG9yIHN0cm9uZ2VyIGFtb25nIGFuaW1hdGVzIHRoYW4gdGhleSB3ZXJlIGFtb25nIGluYW5pbWF0ZXMuIEluIG15IHZpZXcsIHRoZXJlIHdlcmUgbm8gY2xlYXIgaW5kaWNhdGlvbnMgb2Ygc3Vic3RhbnRpYWwgZGV2ZWxvcG1lbnQgYmV0d2VlbiBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZCBpbiB0aGVzZSBhc3BlY3RzIG9mIHRoZSBkZXBsb3ltZW50IG9mIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlLCBzdWdnZXN0aW5nIHRoYXQgdGhpcyBraW5kIG9mIGZpbmUgdHVuaW5nIG1pZ2h0IGJlIG9uZ29pbmcgd2VsbCBpbnRvIG1pZGRsZSBjaGlsZGhvb2TigJRwZXJoYXBzIGludG8gYWRvbGVzY2VuY2Ugb3IgYmV5b25kLiAoU2VlIFRhYmxlIDUuOCBmb3IgYWxsIHN0YW5kYXJkIGRldmlhdGlvbnMgYW5kIGNvcnJlbGF0aW9ucy4pCgpJbiBzdW0sIHdoaWxlIEkgY2hhcmFjdGVyaXplZCBhZHVsdHMgYXMgY29uY2VwdHVhbGl6aW5nIGFuaW1hdGUgYmVpbmdzIGFzIGVudGl0aWVzIHdobyB2YXJ5IG1vcmUgZHJhbWF0aWNhbGx5IGluIHRoZWlyIEJPRFkgYW5kIEhFQVJUIGNhcGFjaXRpZXMgdGhhbiBpbmFuaW1hdGUgb2JqZWN0cyAoYW5kIGZvciB3aG9tIGFsbCB0aHJlZSBhc3BlY3RzIG9mIG1lbnRhbCBsaWZlIGFyZSBtb3JlIGNsb3NlbHkgcmVsYXRlZCksIEkgZG8gbm90IGNvbnNpZGVyIFN0dWRpZXMgMi00IHRvIG9mZmVyIHN0cm9uZyBldmlkZW5jZSB0aGF0IGRpZmZlcmVuY2VzIGluIHBlcmNlaXZlZCB2YXJpYWJpbGl0eSBpbiBtZW50YWwgY2FwYWNpdGllcyBvciBkaWZmZXJlbmNlcyBpbiBwZXJjZWl2ZWQgcmVsYXRpb25zaGlwcyBhbW9uZyBkaWZmZXJlbnQgYXNwZWN0cyBvZiBtZW50YWwgbGlmZSBhcmUgaW1wb3J0YW50IHBhcnRzIG9mIGNoaWxkcmVuJ3MgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24uIEluc3RlYWQsIHRoZXNlIHN0dWRpZXMgc3VnZ2VzdCB0aGF0IHRoZSBwcmltYXJ5IHJvbGUgb2YgdGhlIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGluIDQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgbWVudGFsIGxpZmUgc2VlbXMgdG8gYmUgZ292ZXJuaW5nIHRoZWlyICJhdmVyYWdlIiBhdHRyaWJ1dGlvbnMgb2YgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIChCT0RZKeKAlGFuZCB0byBhIGxlc3NlciBkZWdyZWUsIHNvY2lhbC1lbW90aW9uYWwgKEhFQVJUKSBhbmQgcGVyY2VwdHVhbCBjb2duaXRpdmUgYWJpbGl0aWVzIChNSU5EKeKAlHRvIHZhcmlvdXMgZW50aXRpZXMgaW4gdGhlaXIgd29ybGQuIAoKQmV5b25kIHRoZSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiwgdGhlcmUgd2VyZSBtb3JlIGdlbmVyYWwgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgdGhhdCBlbWVyZ2VkIGZyb20gdGhpcyBhbmFseXNpcyBvZiB0aGUgZGVwbG95bWVudCBvZiBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSB0byB2YXJpb3VzIGJlaW5ncyBpbiB0aGUgd29ybGQuIChTZWUgRmlndXJlIDUuNyBmb3IgYSBzdW1tYXJ5IG9mIGNvbXBhcmlzb25zIGFjcm9zcyBhZ2UgZ3JvdXBzIGluIGFsbCBzdHVkaWVzLikgVGhlIG1vc3Qgc3RyaWtpbmcgYW5kIGNvbnNpc3RlbnQgd2FzIGluIHRoZSBIRUFSVCBkb21haW46IEFjcm9zcyBhbGwgY2hpbGQgc2FtcGxlcyBpbiBTdHVkaWVzIDItNCwgYm90aCBvbGRlciBhbmQgeW91bmdlciBjaGlsZHJlbiB0ZW5kZWQgdG8gZ3JhbnQgYm90aCBhbmltYXRlIGFuZCBpbmFuaW1hdGUgY2hhcmFjdGVycyBtb3JlIEhFQVJUIGFiaWxpdGllcyB0aGFuIGRpZCBhZHVsdHMuIEluIFN0dWR5IDIgYW5kIFN0dWR5IDQgY2hpbGRyZW4gaW4gYm90aCBhZ2UgZ3JvdXBzIGFsc28gZ3JhbnRlZCBib3RoICJlZGdlIGNhc2VzIiAoYmVldGxlcyBhbmQgcm9ib3RzKSBtb3JlIEJPRFkgYWJpbGl0aWVzIHRoYW4gZGlkIGFkdWx0cywgYnV0IHRoaXMgZ2VuZXJhbCBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlIGRpZCBub3QgZXh0ZW5kIHRvIHRoZSB3aWRlciBzZXQgb2YgImRpdmVyc2UgY2hhcmFjdGVycyIgZmVhdHVyZWQgaW4gU3R1ZHkgMyAoaW5zdGVhZCwgaW4gdGhpcyBzdHVkeSwgY2hpbGRyZW4gYXBwZWFyZWQgdG8gX3VuZGVyXy1hdHRyaWJ1dGUgQk9EWSB0byBhbmltYXRlIGNoYXJhY3RlcnMsIHdoaWxlIGNvbnRpbnVpbmcgdG8gb3Zlci1hdHRyaWJ1dGUgQk9EWSB0byBpbmFuaW1hdGUgY2hhcmFjdGVycykuIEFjcm9zcyBzdHVkaWVzLCB0aGVzZSBvdmVyLWF0dHJpYnV0aW9ucyBvZiBIRUFSVCBhbmQgKHdoZW4gcmVsZXZhbnQpIEJPRFkgZGVjbGluZWQgd2l0aCBhZ2UgKGkuZS4sIGJlY2FtZSBtb3JlIGFkdWx0LWxpa2UpLiBGaW5hbGx5LCB0aGVyZSB3ZXJlIHNvbWUgaGludHMgdGhhdCA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuIG1pZ2h0IGhhdmUgX3VuZGVyXy1hdHRyaWJ1dGVkIE1JTkQgdG8gYm90aCBhbmltYXRlIGFuZCBpbmFuaW1hdGUgY2hhcmFjdGVycywgcmVsYXRpdmUgdG8gYWR1bHRzIChTdHVkeSAzOyBidXQgY2YuIFN0dWR5IDQpLCBhbmQsIHJlbGF0ZWRseSwgdGhhdCBib3RoIDQtIHRvIDYteWVhci1vbGQgYW5kIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgTUlORCB0byBhbmltYXRlIGFuZCBpbmFuaW1hdGUgY2hhcmFjdGVycyBpbmNyZWFzZWQgKGkuZS4sIGJlY2FtZSBtb3JlIGFkdWx0LWxpa2UpIHdpdGggYWdlIChTdHVkaWVzIDIgYW5kIDM7IGJ1dCBjZi4gU3R1ZHkgNCkuCgojIENoYXB0ZXIgY29uY2x1c2lvbgoKSW4gdGhpcyBjaGFwdGVyLCBJIGV4cGxvcmVkIGEgdGhpcmQgYXNwZWN0IG9mIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGFtb25nIFVTIGNoaWxkcmVuIGFuZCBhZHVsdHM6IFRoZSBfZGVwbG95bWVudF8gb2YgdGhlc2UgcmVwcmVzZW50YXRpb25zIGluIHJlYXNvbmluZyBhYm91dCBwYXJ0aWN1bGFyIGVudGl0aWVzIGluIHRoZSB3b3JsZC4gSSBmb2N1c2VkIGluIHBhcnRpY3VsYXIgb24gdGhlIHJvbGUgb2YgdGhlIGNsYXNzaWMgZGlzdGluY3Rpb24gYmV0d2VlbiAiYW5pbWF0ZSBiZWluZ3MiIChwcmltYXJpbHksIGh1bWFucyBhbmQgb3RoZXIgYmlvbG9naWNhbCBhbmltYWxzKSBhbmQgImluYW5pbWF0ZSBvYmplY3RzIiAoaW4gdGhpcyBjYXNlLCB0ZWNobm9sb2dpZXMgYXMgd2VsbCBhcyBpbmVydCBvYmplY3RzKSBpbiBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5ELgoKVGhlc2Ugc3R1ZGllcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBmb2xsb3dpbmcgdGhlb3J5OiBCeSB0aGUgcHJlc2Nob29sIHllYXJzLCBVUyBjaGlsZHJlbidzIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGluY2x1ZGVzIGFuIGF3YXJlbmVzcyB0aGF0IGFuaW1hdGUgYmVpbmdzIGFyZSBtb3JlIGxpa2VseSB0aGFuIGluYW5pbWF0ZSBvYmplY3RzIHRvIGhhdmUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIGxpa2UgaHVuZ2VyLCBwYWluLCBhbmQgZmF0aWd1ZSAod2hhdCBJIGhhdmUgY2FsbGVkIEJPRFkpLiBUaGlzIGNvbnRpbnVlcyB0byBiZSB0aGUgcHJpbWFyeSBheGlzIG9mIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBtZW50YWwgbGl2ZXMgb2YgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMgdGhyb3VnaG91dCBkZXZlbG9wbWVudCwgaW5jcmVhc2luZyBpbiBzaXplIGFuZCByZWxpYWJpbGl0eSBvdmVyIGVhcmx5IGFuZCBtaWRkbGUgY2hpbGRob29kIChhbmQgcGVyaGFwcyBiZXlvbmQpOyB1bHRpbWF0ZWx5LCBVUyBhZHVsdHMgcGVyY2VpdmUgdGhlIEJPRFkgZG9tYWluIHRvIGJlIHRoZSBzaXRlIG9mIHRoZSBtb3N0IGRyYW1hdGljIGFuZCByb2J1c3QgZGlmZmVyZW5jZXMgaW4gdGhlIG1lbnRhbCBsaXZlcyBvZiBhbmltYXRlIGJlaW5ncyB2cy4gaW5hbmltYXRlIG9iamVjdHMuIAoKQXQgYWxsIGFnZXMsIGFuaW1hdGVzIGFuZCBpbmFuaW1hdGVzIGFyZSBhbHNvIHBlcmNlaXZlZCB0byBkaWZmZXIgaW4gdGhlaXIgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgKEhFQVJUKSBhbmQgcGVyY2VwdHVhbC1jb2duaXRpdmUgY2FwYWNpdGllcyAoTUlORCksIGJ1dCBhbW9uZyBjaGlsZHJlbiBhcyB3ZWxsIGFzIGFkdWx0cyB0aGVzZSBkaWZmZXJlbmNlcyBhcmUgc21hbGxlciBhbmQgbW9yZSB2YXJpYWJsZSBhY3Jvc3MgdGhlIHBhcnRpY3VsYXIgYmVpbmdzIGluIHF1ZXN0aW9uLiAKCkZpbmFsbHksIGF0IHNvbWUgcG9pbnQgaW4gbGF0ZXIgY2hpbGRob29kIG9yIGFkb2xlc2NlbmNlLCBVUyBjaGlsZHJlbiBjb21lIHRvIGFjcXVpcmUgYWR1bHRzJyBpbnR1aXRpb24gdGhhdCBhbmltYXRlIGJlaW5ncyBhcmUgZGlzdGluY3QgZnJvbSBpbmFuaW1hdGUgb2JqZWN0cyBub3Qgb25seSBpbiB0aGF0IHRoZWlyIG1lbnRhbCBjYXBhY2l0aWVzIGFyZSwgb24gYXZlcmFnZSwgc3VwZXJpb3IgKGVzcGVjaWFsbHkgaW4gdGhlIEJPRFkgZG9tYWluKeKAlGJ1dCBhbHNvIGluIHRoYXQgdGhlaXIgbWVudGFsIGNhcGFjaXRpZXMgYXJlIG1vcmUgX3ZhcmlhYmxlXyBhY3Jvc3Mgc3BlY2lmaWMgZW50aXRpZXMgYW5kIG1vcmUgX2NvcnJlbGF0ZWRfIGFjcm9zcyBkb21haW5zIChCT0RZLCBIRUFSVCwgYW5kIE1JTkQpLiBUaGVzZSBudWFuY2Vz4oCUd2hpY2ggbWlnaHQgYmUgY2hhcmFjdGVyaXplZCBhcyAib3Zlci1oeXBvdGhlc2VzIiBhYm91dCB0aGUgbWVudGFsIGxpdmVzIG9mIGFuaW1hdGVzIHZzLiBpbmFuaW1hdGVzIFtAR29vZG1hbjE5NTVd4oCUYXBwZWFyIG5vdCB0byBoYXZlIGVtZXJnZWQgYnkgdGhlIGFnZSBvZiA3LTl5IGFuZCBtYXkgaW5zdGVhZCBkZXZlbG9wIGxhdGVyIGluIGNoaWxkaG9vZCBvciBhZG9sZXNjZW5jZS4KCkluIGFkZGl0aW9uIHRvIHRoaXMgZW1lcmdlbnQgdGhlb3J5IG9mIHRoZSByZWZpbmVtZW50IG9mIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgdG8gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGJlaW5ncywgdGhlc2Ugc3R1ZGllcyBhbHNvIHN1Z2dlc3QgdGhhdOKAlHJlZ2FyZGxlc3Mgb2YgYW5pbWFjeSBzdGF0dXPigJRjaGlsZHJlbiBtYXkgaGF2ZSBhIHRlbmRlbmN5IHRvIG92ZXItYXR0cmlidXRlIGJvdGggdGhlIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyBvZiB0aGUgQk9EWSBhbmQgZXNwZWNpYWxseSB0aGUgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgb2YgdGhlIEhFQVJUIHRvIG1hbnkgZW50aXRpZXMgaW4gdGhlIHdvcmxkLCBjb3VwbGVkIHdpdGggYSAod2Vha2VyKSB0ZW5kZW5jeSB0byBfdW5kZXJfLWF0dHJpYnV0ZSB0aGUgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIG9mIHRoZSBNSU5ELiBUaGUgdGVuZGVuY3kgdG8gb3Zlci1hdHRyaWJ1dGUgSEVBUlQgaXMgcGFydGljdWxhcmx5IHN0cmlraW5n4oCUaXQgZW1lcmdlZCByb2J1c3RseSBpbiBhbGwgc3R1ZGllcywgYW5kIHdoaWxlIGF0dHJpYnV0aW9ucyBvZiBIRUFSVCBkaWQgYXBwZWFyIHRvIGRlY2xpbmUgd2l0aCBhZ2UsIHRoZXkgZGlkIG5vdCBhcHBlYXIgdG8gcmVhY2ggImFkdWx0LWxpa2UiIGxldmVscyBldmVuIGFtb25nIHRoZSBvbGRlc3QgY2hpbGRyZW4gaW4gdGhlc2Ugc3R1ZGllcy4gVGhpcyBmaW5kaW5nIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgcG9zc2liaWxpdHkgdGhhdCwgd2VsbCBpbnRvIG1pZGRsZSBjaGlsZGhvb2QsIGNoaWxkcmVuIG1heSBtYWludGFpbiBhIGdlbmVyYWwgb3Blbm5lc3MgdG8gdW50cmFkaXRpb25hbCBzb2NpYWwgcGFydG5lcnMgKGJvdGggYW5pbWF0ZSBhbmQgaW5hbmltYXRlKS4KCkFzIGluIHByZXZpb3VzIGNoYXB0ZXJzLCB0aGVzZSBhcmUgbm90IHRoZSBvbmx5IHBvc3NpYmxlIGludGVycHJldGF0aW9uIG9mIHRoZSBwYXR0ZXJucyBvZiByZXN1bHRzIHByZXNlbnRlZCBoZXJlOyBJIGhhdmUgaW50ZW50aW9uYWxseSBzdGF0ZWQgdGhlc2UgaHlwb3RoZXNlcyBpbiB0aGVpciBzdHJvbmdlc3QgZm9ybSwgdG8gZmFjaWxpdGF0ZSBjb25maXJtYXRvcnkgdGVzdHMgaW4gZnV0dXJlIHJlc2VhcmNoLiBUaGUgcHJpbWFyeSByb2xlIG9mIHRoZSBzdHVkaWVzIGFuZCBhbmFseXNlcyBkaXNjdXNzZWQgaGVyZSBoYXMgYmVlbiB0byBpbnNwaXJlIHRoZSBoeXBvdGhlc2lzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoIGFuZCB0byBsYXkgdGhlIGZvdW5kYXRpb24gZm9yIHRoZXNlIGZ1dHVyZSBzdHVkaWVzLiAgCgpUaGlzIG1hcmtzIHRoZSBlbmQgb2YgbXkgZXhwbG9yYXRpb24gb2YgdGhlIGxhcmdlLCByaWNoIGRhdGFzZXRzIGVtZXJnaW5nIGZyb20gU3R1ZGllcyAxLTQuIEluIHRoZSBuZXh0IGFuZCBmaW5hbCBjaGFwdGVyLCBJIHN0ZXAgYmFjayB0byByZWZsZWN0IG9uIHdoYXQgdGhlc2UgdGhyZWUgInBhc3NlcyIgYXQgYW5hbHlzaXMgaGF2ZSByZXZlYWxlZCBhYm91dCBjb25jZXB0dWFsIGRldmVsb3BtZW50IGluIHRoaXMgZG9tYWluLCBob3cgdGhlc2UgdGhyZWUgYXNwZWN0cyBvZiBjb25jZXB0dWFsIGRldmVsb3BtZW50IChjb25jZXB0dWFsIHVuaXRzLCByZWxhdGlvbmFsIG9yZ2FuaXphdGlvbiwgYW5kIGRlcGxveW1lbnQpIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gb25lIG90aGVyLCBhbmQgd2hhdCB0aGlzIGNhc2Ugc3R1ZHkgb2YgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIG1pZ2h0IHJldmVhbCBhYm91dCBjb25jZXB0dWFsIGRldmVsb3BtZW50IG1vcmUgYnJvYWRseS4KCgojIFJlZmVyZW5jZXMKCg==